WebP Express — исключение размеров картинок
Иногда возникает необходимость перевести все изображения на старом сайте с большим количеством медиа в формат WebP. Обычно такой сайт размещён на шаред-хостинге, где нет особых инструментов для быстрой конвертации. На помощь приходят плагины, например, WebP Express. Однако у этого плагина нет возможности исключить определённые размеры изображений WordPress (например, thumbnail, large или 2048×2048) из массовой конвертации, что могло бы ускорить процесс
Ещё хуже то, что разработчик не оставил фильтров для расширения функционала плагина. Поэтому остаётся единственный вариант — создать временное решение (костыль), которое будет работать до следующего обновления плагина. Но это не критично, ведь процедуру bulk conversion нужно провести всего один раз
Для этого открываем файл плагина: /wp-content/plugins/webp-express/lib/classes/Convert.php и модифицируем его. Находим функцию convertFile и сразу после try добавляем наш сниппет, как на картинке ниже:
Сам код сниппета:
// Исключаемые размеры, включая 'original' для пропуска оригинальных файлов
$excluded_size_names = ['thumbnail', 'medium', '2048x2048'];
$excluded_sizes = [];
// Формируем массив суффиксов исключаемых размеров
foreach ($excluded_size_names as $size_name) {
if ($size_name === 'original') continue;
$width = get_option("{$size_name}_size_w");
$height = get_option("{$size_name}_size_h");
if ($width) $excluded_sizes[] = "-{$width}x";
if ($height) $excluded_sizes[] = "-x{$height}";
if ($width && $height) $excluded_sizes[] = "-{$width}x{$height}";
}
$filename = basename($source);
$is_original = !preg_match('/-\d+x\d+\./', $filename); // Файл без размерного суффикса считается оригиналом
if (($is_original && in_array('original', $excluded_size_names)) ||
array_filter($excluded_sizes, fn($size) => strpos($filename, $size) !== false)
) {
return [
'success' => false,
'msg' => '',
'log' => '',
];
}
Пояснения: в массив $excluded_size_names мы записываем все зарегистрированные размеры картинок wordpress, в моем примере я исключаю из конвертации размеры превью, средние квадратные и сверхбольшие (thumbnail, medium, 2048×2048)
После чего процесс массовой конвертации пойдет куда быстрее
Это конечно специфичный кейс, но я буду рад, если это кому-то поможет