For inserting a responsive <picture>
element in your template, use the get_picture
function or the get-picture
API endpoint with the available parameters.
PHP
ResponsivePics::get_picture(id, sizes, classes, lazyload, intrinsic);
REST API
GET /wp-json/responsive-pics/v1/get-picture/<id>?sizes=<sizes>&classes=<classes>&lazyload=<lazyload>&intrinsic=<intrinsic>
Picture Parameters
Parameter | Type | Required | Default | Definition |
---|---|---|---|---|
id | number | yes | The WordPress image id (e.g. 1 ). |
|
sizes | string | yes | A comma-separated string of preferred image sizes (e.g. 'xs-12, sm-6, md-4, lg-3' ). See the Sizes section for more information. |
|
classes | string | optional | null |
A comma-separated string of additional CSS classes you want to add to the picture element (e.g. 'my_picture_class' or 'my_picture_class, my_second_picture_class' ). |
lazyload | boolean | optional | false |
When true enables lazyload classes and data-srcset attributes. See the Lazyloading section for more information. |
intrinsic | boolean | optional | false |
When true enables intrinsic classes and data-aspectratio attributes. See the Intrinsic Aspectratio section for more information. |
For inserting a responsive <img>
element in your template, use the get_image
function or the get-image
API endpoint with the available parameters.
PHP
ResponsivePics::get_image(id, sizes, crop, classes, lazyload);
REST API
GET /wp-json/responsive-pics/v1/get-image/<id>?sizes=<sizes>&crop=<crop>&classes=<classes>&lazyload=<lazyload>
Image Parameters
Parameter | Type | Required | Default | Definition |
---|---|---|---|---|
id | number | yes | The WordPress image id (e.g. 1 ). |
|
sizes | string | yes | A comma-separated string of preferred image sizes (e.g. 'xs-12, sm-6, md-4, lg-3' ). See the Sizes section for more information. |
|
crop | string | optional | false |
A crop-factor of the width for the desired height within the default range of 0-2 (e.g. 0.75 ) with optional crop positions (e.g. 0.75|c t ) |
classes | string | optional | null |
A comma-separated string of additional CSS classes you want to add to the image element (e.g. 'my_img_class' or 'my_img_class, my_second_img_class' ). |
lazyload | boolean | optional | false |
When true enables lazyload classes and data-srcset attributes. See the Lazyloading section for more information. |
For inserting a responsive background image in your template, use the get_background
function or the get-background
API endpoint with the available parameters.
PHP
ResponsivePics::get_background(id, sizes, classes);
REST API
GET /wp-json/responsive-pics/v1/get-background/<id>?sizes=<sizes>&classes=<classes>
Background Parameters
Parameter | Type | Required | Default | Definition |
---|---|---|---|---|
id | number | yes | The WordPress image id (e.g. 1 ). |
|
sizes | string | yes | A comma-separated string of preferred image sizes (e.g. 'xs-12, sm-6, md-4, lg-3' ). |
|
classes | string | optional | null |
A comma-separated string of additional CSS classes you want to add to the background element (e.g. 'my_bg_class' or 'my_bg_class, my_second_bg_class' ). |
The following image file formats are supported:
File format | MIME Type | Properties |
---|---|---|
jp(e)g | image/jpeg | yes |
png | image/png | When the png contains an alpha channel, an extra 'has-alpha' class will be added to the picture image element for additional styling. |
gif | image/gif | When the gif is animated (it will check for multiple header frames), no image resizing or cropping will be done to prevent discarding the animation. |
Any other image formats, will not be resizes or cropped.
The following syntax is available for each image size in the sizes
parameter:
breakpoint:width
Parameter | Type | Required | Default | Definition |
---|---|---|---|---|
breakpoint | number or string | yes | If undefined, and width is a number, breakpoint will be the same as the width. If undefined, and width is a column definition, breakpoint will be the corresponding breakpoint (e.g. if width is 'xs-8' , breakpoint will be 'xs' ). |
|
width | number or string | yes | A column definition is a key in $grid_widths plus a dash and a column span number (e.g. 'xs-8' ). If column span number is full , the full width of the next matching $breakpoint is used (e.g. 'xs-full' ) |
Since the <picture>
element and background images support art directed images, the following full syntax is available for each image size in the sizes
parameter:
breakpoint:width [/factor|height]|crop_x crop_y
Parameter | Type | Required | Default | Definition |
---|---|---|---|---|
breakpoint | number or string | yes | If undefined, and width is a number, breakpoint will be the same as the width. If undefined, and width is a column definition, breakpoint will be the corresponding breakpoint (e.g. if width is 'xs-8' , breakpoint will be 'xs' ). |
|
width | number or string | yes | A column definition is a key in $grid_widths plus a dash and a column span number (e.g. 'xs-8' ). If column span number is full , the full width of the next matching $breakpoint is used (e.g. 'xs-full' ) |
|
height | number | optional | The desired height of the image (e.g. 500 ) |
|
factor | number | optional | A crop-factor of the width for the desired height within the default range of 0-2 (e.g. 0.75 ) |
|
crop_x | string | optional | c | Crop position in horizontal direction: l(eft), c(enter), or r(ight) |
crop_y | string | optional | c | Crop position in vertical direction: t(op), c(enter)` or `b(ottom) . If undefined, crop_x will be treated as a shortcut: 'c' = 'center center', 't' = 'top center', r = 'right center', 'b' = 'center bottom', 'l' = 'left center' |
- When visiting a front-end page and a
ResponsivePics
function call is made, this library will add the resize and/or crop image task as a job to the background process queue using Action Scheduler. - On every page load or on the next cron interval, Action Scheduler will run the next batch of jobs in the background process queue. See the Cron section for more information.
- When a job is up next in the queue and ready to be processed it will execute the resize and/or crop task and save the image in the same location as the original image when successful and it will remove the job from the queue.
- Once the image variation is created, it will skip the process of that variation on the next page load.
- When you change one of the image size parameters, it will automatically try and create the new image variation on the next page load.
- When the original image does not meet the dimension requirements of the requested image size, it will skip that image size variation and proceed to the next image size.
- Alt text will automatically be added on the picture img element if the original image in the media library has one.
The background processing library Action Scheduler has a built in administration screen for monitoring, debugging and manually triggering scheduled image resize jobs. The administration interface is accesible via:
Tools > Scheduled Actions
Every resize job will be grouped by it’s wordpress image id.
When you are using the built-in WP-Cron, the background process queue will only process any tasks on every page load.
If you have disabled WP-Cron
in your setup and you are using your own cron job on your server, Action Scheduler will use the interval set in that cron job to process the next batch of jobs.
define('DISABLE_WP_CRON', true);
If you’re using Trellis like us ❤️, the default cron interval is set to every 15 mins.
You could override this to for example 1 mins with an environment variable per wordpress site like this:
In for example trellis/group_vars/development/wordpress_sites.yml:
wordpress_sites: example.com: site_hosts: - canonical: example.test redirects: - www.example.test local_path: ../site # path targeting local Bedrock site directory (relative to Ansible root) admin_email: admin@example.test multisite: enabled: false ssl: enabled: false provider: self-signed cache: enabled: false cron: interval: 1
In trellis/roles/wordpress-setup/tasks/main.yml:
- name: Setup WP system cron cron: name: "{{ item.key }} WordPress cron" minute: "*/{{ item.value.cron.interval | default(15) }}" user: "{{ web_user }}" job: "cd {{ www_root }}/{{ item.key }}/{{ item.value.current_path | default('current') }} && wp cron event run --due-now > /dev/null 2>&1" cron_file: "wordpress-{{ item.key | replace('.', '_') }}" state: "{{ (cron_enabled and not item.value.multisite.enabled) | ternary('present', 'absent') }}" with_dict: "{{ wordpress_sites }}"
Don’t forget to re-provision your server after changing this value.
If an error occurs during the resizing process or if there’s invalid syntax, ResponsivePics will display or return an error.
PHP
ResponsivePics errors - breakpoint xxs is neither defined nor a number
REST API
{ "code": "responsive_pics_invalid", "message": "breakpoint xxs is neither defined nor a number", "data": { "xs": 0, "sm": 576, "md": 768, "lg": 992, "xl": 1200, "xxl": 1400 } }
When enabling the lazyload
option in the ResponsivePics::get_picture()
or ResponsivePics::get_image()
function, this library automatically:
- adds a
lazyload
class to the<img>
element. - swaps the
srcset
withdata-srcset
attributes on the picture<source>
or the<img>
elements.
This will enable you to use a lazy loading plugin such as Lazysizes or Lozad.
You can also set your own lazyload
class by passing it to ResponsivePics library in your theme’s functions.php:
if (class_exists('ResponsivePics')) { ResponsivePics::setLazyLoadClass('lozad'); }
To install Lazysizes in your wordpress theme as a node module, run the following command from your theme directory:
npm
npm install --save lazysizes
Yarn
yarn add lazysizes
And import the package in your theme’s global javascript file:
import 'lazysizes';
When enabling the intrinsic
option in the ResponsivePics::get_picture()
function call, this library automatically:
- adds a
intrinsic
class to the<picture>
element and aintrinsic__item
class to the picture<img>
element. - adds
data-aspectratio
attributes on the picture<source>
and<img>
elements with the calculated source image ratio.
This will enable you to pre-occupy the space needed for an image by calculating the height from the image width or the width from the height with an intrinsic plugin such as the lazysizes aspectratio extension.
To use the Lazysizes aspectratio extension in your wordpress theme, first install lazysizes as a node module as described in the Lazyloading section and import the extension in your theme’s global javascript file:
import 'lazysizes/plugins/aspectratio/ls.aspectratio.js';