WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Суффикс «-scaled» у картинки, или что WP делает с большими изображениями

С версии WordPress 5.3 при загрузке очень больших картинок создается её меньшая копия, так чтобы при запросе full размера вместо оригинала использовалась эта копия картинки. Чтобы при загрузке, скажем, картинки размером 5000x2000 на сайте эта картинка нигде не использовалась, а использовалась её уменьшенная до «приличных» размеров копия. По умолчанию «приличным» размером считается картинка не больше 2560 пикселей в ширину или высоту.

Подробнее, как это работает.

Допустим, мы загружаем картинку размером 5000x2000px. WordPress в этом случае, кроме создания прочих миниатюр, создаст из этой картинки копию размером 2560x1024px (пропорционально впишет её в размер 2560) и сохранит её в папку загрузок uploads с новым названием {ИМЯ_КАРТИНКИ}-scaled.{EXT}. Далее, заменит путь оригинальной картинки в метаданных, на этот созданный путь, чтобы эта копия считалась оригиналом. А также, сохранит имя исходной картинки в метаданные под ключом original_image, см. _wp_image_meta_replace_original().

Созданная копия оригинала с «приличным» размером, теперь считается оригинальной картинкой и путь до неё записан в метаполе _wp_attached_file. И теперь функция, которая обычно возвращает оригинальный путь get_attached_file() или оригинальный URL wp_get_attachment_url() и другие функции, которые должны вернуть оригинальную картинку, будут возвращать новый -scaled путь/URL.

Файл исходной картинки не удаляется и находится в папке uploads и путь или URL к ней можно получить через новые для WP 5.3 функции:

Уменьшенная версия будет создаваться для любой картинки ширина или высота которой больше чем указанный порог - 2560px.

Порог («приличный» размер, о котором идет речь) можно изменить через фильтр big_image_size_threshold вернув в нем нужный размер:

# Изменим `-scaled` размер (максимально допустимый размер) картинки по ширине/высоте
add_filter( 'big_image_size_threshold', function(){
	return 1600;
} );

Или можно полностью отключить всю эту «-scaled» логику вернув в фильтре 0:

# Отменим `-scaled` размер - ограничение максимального размера картинки 
add_filter( 'big_image_size_threshold', '__return_zero' );

-

2 коммента
  • kolshix615 paxtoy.com

    !"№;%:?*()_+
    Полный абзац , ну не Муда** ли от вордпресс !!

    Спасибо автору, хорошо что вовремя наткнулся на статью. А то собрался весь сайт лопатить.
    Намудрили и сделали через жопу: нагружаю базу + в наглую правят имена файлов. Уже 4 года наблюдаю данный метод на других сайтах, но по другому.

    создается код регистрации дополнительного размера с проверкой на размер в килобайтах + логика когда нужен дубль файла с уменьшенным качеством и размером.

    Ответить23.Апр.2020 03:35 #