Convert PNG, JPG and GIF images to WebP and speed up your web
Statistics say that WebP format can save over a half of the page weight without losing images quality.
Convert PNG, JPG and GIF images to WebP and speed up your web, save visitors download data, make your Google ranking better.
Maybe you want to support also less famous JPEG extension like jpe, jfif or jif
add_filter( 'itw_extensions', 'extra_itw_extensions', 10, 1 ); function extra_itw_extensions( $extensions ){ $extensions[] = 'jpe'; $extensions[] = 'jfif'; $extensions[] = 'jif'; return $extensions; }
Maybe you want to disable WebP for thumbnails
add_filter( 'itw_sizes', 'disable_itw_sizes', 10, 2 ); function disable_itw_sizes( $sizes, $attachmentId ){ unset( $sizes['thumbnail'] ); return $sizes; }
Maybe you want to modify htaccess rules somehow
add_filter( 'itw_htaccess', 'modify_itw_htaccess', 10, 2 ); function modify_itw_htaccess( $rewrite_rules ){ // do some magic here return $rewrite_rules; }
Maybe you use roots.io/bedrock or other custom folder structure
add_filter( 'itw_abspath', 'modify_itw_abspath', 10, 2 ); function modify_itw_abspath( $abspath ){ return trailingslashit( WP_CONTENT_DIR ); }
Maybe you want to automatically generate WebP for other plugins
add_action( 'XXPLUGIN_image_created', 'XX_images_to_webp', 10, 2 ); function XX_images_to_webp( $image_path ){ global $images_to_webp; $images_to_webp->convert_image( $image_path ); }
images-to-webp
directory to the /wp-content/plugins/
directoryIt should work almost everywhere 😉
PHP 5.6 or higher
GD or Imagick extension with WebP support
Enabled server modules: mod_mime
, mod_rewrite
WebP images are generated in same directory as original image. Example:
original img: /wp-content/uploads/2019/11/car.png
webp version: /wp-content/uploads/2019/11/car.png.webp
Just add ?no_webp=1
to the URL and original JPG/PNG will be loaded
When you have installed plugin and converted all images, follow these steps:
Google Chrome
and enable Dev Tools
(F12).Network
tab click on Disable cache
and select filtering for Img
(Images).Type
column.webp
is there, then everything works fine.If you have some proxy setup or some other combination of NGiNX and Apache on your server, then probably .htaccess changes won’t work and you will need to ask your hosting provider to disable NGiNX direct processing of image static files.
Plugin should automatically update your .htaccess with needed rules.
In case it’s not possible to write them automatically, screen with instructions will appear.
Anyway, here is how it should look like:
<IfModule mod_mime.c> AddType image/webp .webp </IfModule> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{REQUEST_FILENAME} "/" RewriteCond %{REQUEST_FILENAME} "\.(jpg|jpeg|png|gif)$" RewriteCond %{REQUEST_FILENAME}\.webp -f RewriteCond %{QUERY_STRING} !no_webp RewriteRule ^(.+)$ $1\.webp [NC,T=image/webp,E=webp,L] </IfModule>
After you activate plugin, screen with instructions will appear.
Anyway, here is how it should look like:
You need to add this map directive to your http config, usually nginx.conf ( inside of the http{} section ):
map $arg_no_webp $no_webp{ default ""; "1" "no_webp"; } map $http_accept $webp_suffix{ default ""; "~*webp" ".webp"; }
then you need to add this to your server block, usually site.conf or /nginx/sites-enabled/default ( inside of the server{} section ):
location ~* ^/.+\.(png|gif|jpe?g)$ { add_header Vary Accept; try_files $uri$webp_suffix$no_webp $uri =404; }
Are you using ISP Manager? Then it’s probably not working for you, but no worries, you just need to go to WWW domains
and delete jpg|jpeg|png
from the Static content extensions
field.
There is no button to do that and it will also not delete generated WebPs automatically when you deactivate the plugin, but if you really need this, you can run some shell command to achieve this:
find . -type f -name "*.webp" -exec bash -c 'if [ -f "${1%.webp}" ]; then echo "Deleting $1"; rm "$1"; fi' _ {} \;
This will find all the files with a .webp
extension and if there is similar file with the exact filename, but without the .webp
extension, then it will delete it.