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)

После чего процесс массовой конвертации пойдет куда быстрее

Это конечно специфичный кейс, но я буду рад, если это кому-то поможет