1. Нужен скрипт который будет конвертировать png и jpg в webp и складывать с тем же именем и постфиксом .webp
2. При запросе файла .*\.(png|jpe?g)$ проверить заголовки Accept: image/webp, если нет отдать оригинал картинки. Иначе идём дальше.
3. Пробовать отдать сначало $uri.webp
4. Если файла нет то выполнять скрипт с параметром $uri
5. Скрипт создает .webp и выводит его
Смотреть в сторону
https://github.com/rosell-dk/webp-on-demand
Пример конфига для nginx:
location ~* ^/?wp-content/.*\.(png|jpe?g)$ {
add_header Vary Accept;
expires 365d;
if ($http_accept !~* "webp"){
break;
}
try_files
$uri.webp
/webp-on-demand.php?xsource=x$request_filename
;
}