Как отключить сжатие изображений в WordPress?

Когда мы загружаем изображение в WordPress, то далее система нарезает его на новые изображения в соответствии с настройками в «Настройки — Медиафайлы».

По умолчанию там указано следующее:

  • Размер миниатюры — 150х150
  • Средний размер — 300х300
  • Крупный размер — 1024х1024
  • На самом деле есть еще размеры, которые можно использовать, но об этом я напишу как-нибудь потом

Но также часто кроме создания новых изображений, WordPress также немного поджимает их, фактически качество сжатия по умолчанию 90%. Что может влиять на внешний вид сайта. Изображения становятся более «мыльными». Как поправить?

Сниппет

Сниппет, который мы можем вставить например в functions.php:

add_filter('jpeg_quality', function () {
  return 100;
});

add_filter('wp_editor_set_quality', function () {
  return 100;
});

Подробнее почитать про фильтры wp_editor_set_quality и jpeg_quality можно в документации, ссылки оставлю ниже. Но краткая суть почему мы используем эти два фильтра следующая:

  • wp_editor_set_quality — общий фильтр
  • но для JPEG он игнорируется,
  • потому что для JPEG используется отдельный фильтр jpeg_quality

В WP_Image_Editor логика примерно такая:

  • если MIME = image/jpeg → применяется jpeg_quality
  • для остальных форматов → применяется wp_editor_set_quality

Регенерация старых изображений

Важно упомянуть следующий нюанс: код выше отключает сжатие только для новых изображений, а старые останутся такими же мыльными. Чтобы это исправить надо сгенерировать изображения заново. Сделать это можно с помощью плагина, например с помощью Force Regenerate Thumbnails