Вопрос или проблема
WordPress удивителен, и я большой поклонник этого.
Но версия 5.3 принесла мне (и многим другим, 1, 2, 3, 4…) большую проблему с новой принудительной функцией автоматического уменьшения больших изображений.
Я пытаюсь отключить ее (потому что она мне не нужна/не хочется, и потому что она не работает) с помощью следующего фильтра:
add_filter('big_image_size_threshold', '__return_false');
Где функция обратного вызова __return_false() — это просто обертка WordPress для возвращения false.
Но она не работает, я все еще получаю ошибку, что означает, что функция не отключена.
То же самое происходит и с рекомендованным плагином. Это не устраняет ошибку.
Какая ошибка?: Постобработка не удалась, пожалуйста, уменьшите изображение до 2500 пикселей.
Я очистил кэш браузера, установил версию PHP 7.2 и активировал mbstring (как рекомендовано другими относительно этой же проблемы).
Ошибка возникает при некоторых загрузках, а не при всех:
И она никак не связана с загрузкой больших изображений.
Вот несколько фактов, описывающих проблему:
- Я делаю случайные скриншоты случайных областей (значит, случайные размеры).
- Я всегда делаю маленькие прямоугольники (максимум 800px x 400px)
- Некоторые изображения загружаются нормально.
- Другие изображения не загружаются.
- Но конкретные изображения, которые работают, всегда работают, если пробовать загружать несколько раз.
- А конкретные изображения, которые не работают, никогда не работают, даже если попробовать загружать несколько раз (даже переименовывая файл).
Теперь это работает как ожидалось (отключено масштабирование), при следующих настройках:
В моем файле functions.php
add_filter('big_image_size_threshold', '__return_false');
В настройках медиабиблиотеки WP:
Я нашел сайт клиента, где фильтр не работал. Я провел множество тестов на тестовом сайте, и фильтр сработал. Вопрос остается в веб-сайте, использующем тему Avada. Avada имеет встроенный в настройки темы размер порогового значения, чтобы вы могли настроить размер уменьшенного изображения. Это переопределяло место, где я пытался отключить его в моем основном плагине.
Сначала я попытался добавить приоритет 9999 к функции add_filter, чтобы, надеюсь, оно выполнялось позже, но в этом случае это, похоже, не работает (я все еще тестирую это). Я установил пороговый размер на 0 в Avada, и это успешно отключило масштабирование больших изображений.
Я предлагаю попробовать добавить приоритет, чтобы посмотреть, поможет ли это. Если нет, найдите ваше тему и плагины, чтобы узнать, установлено ли это там. Я знаю, что это может быть сложно на рабочем сайте, но я бы попробовал использовать одну из тем WP по умолчанию и деактивировать все плагины, чтобы проверить, работает ли это. Затем активируйте тему и плагины по одному, чтобы выяснить, если один из них вызывает проблему.
Я использовал этот плагин для тестирования такого типа на рабочих сайтах, WP-Staging
Чтобы удалить другие размеры, я обнаружил, что недостаточно установить фильтр, вы также должны отключить новые размеры.
// Удаление размеров изображений
function zgwd1010_filter_image_sizes($sizes) {
unset($sizes['1536x1536']); // отключить средне-большой размер 2x
unset($sizes['2048x2048']); // отключить большой размер 2x
return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'zgwd1010_filter_image_sizes');
У меня такая же проблема с невозможностью отключить big_image_size_threshold (одна из худших новых функций, когда-либо выпущенных WordPress) для шутки я попробовал удалить кавычки вокруг return false, но это не решает проблему. Пример в Codex действительно показывает кавычки. https://codex.wordpress.org/Function_Reference/_return_false
Я открыл тикет в трекере core на этот счёт, возможная ошибка.
Я не знаю, почему __return_false не работает, но что-то вроде этого работает:
function gc_big_image_size_threshold($threshold) {
return 9999; // новое пороговое значение
}
add_filter('big_image_size_threshold', 'gc_big_image_size_threshold', 100, 1);
Недавно у меня были проблемы с заставлением этого фильтра работать с ‘ __return_false’, но я смог решить проблему. Что оказалось решающим для меня, так это добавление параметра приоритета к функции add_filter (в этом случае 100), чтобы она выполнялась позже.
add_filter('big_image_size_threshold', '__return_false', 100, 1);
Ответ или решение
Отключение автоматического масштабирования больших изображений в WordPress стало актуальной задачей для пользователей после выхода версии 5.3. Этот новый функционал, хотя и задуман для оптимизации нагрузки сети, вызывает неудобства у многих пользователей, сталкивающихся с возникающими при загрузке ошибок. Рассмотрим, как правильно отключить эту функцию и избежать проблем с загрузкой изображений.
Теория
WordPress с версии 5.3 внедрил функцию автоматического масштабирования изображений, превышающих установленные пороги размера, до 2500 пикселей по более длинной стороне. Такая практика должна улучшать производительность сайта и снижать затраты на хранение данных. Однако для некоторых пользователей это создает проблемы: возникает сообщение об ошибке при загрузке изображений и невозможность загружать изображения даже меньшего размера.
Основным способом отключения этой функции является добавление фильтра big_image_size_threshold
с возвратом ложного значения. Стандартный подход выглядит так:
add_filter( 'big_image_size_threshold', '__return_false' );
Тем не менее, не всегда этот метод срабатывает из-за конфликта с темами или плагинами. Поэтому важно разобраться с настройками конкретной темы или плагина, который может переопределять поведение этого фильтра.
Примеры
-
Конфликт с темами и плагинами: Определенные темы, такие как Avada, имеют встроенные параметры, которые могут переопределять глобальные настройки сайта. В таких случаях полезно либо изменить настройки темы, либо установить фильтр с более высоким приоритетом, чтобы он выполнялся после всех других зависимостей.
-
Настройка приоритета фильтра: Добавление параметра приоритета может помочь фильтру исполняться позже, после применяемых темами или плагинами изменений:
add_filter( 'big_image_size_threshold', '__return_false', 100, 1 );
-
Изменение порога: Вместо полного отключения масштабирования можно изменить пороговое значение, задав его гораздо выше стандартного:
function gc_big_image_size_threshold( $threshold ) { return 9999; // новое пороговое значение } add_filter('big_image_size_threshold', 'gc_big_image_size_threshold', 100, 1);
-
Удаление промежуточных размеров: Для полного контроля над размерами, создаваемыми WordPress, имеет смысл также отключить создание некоторых промежуточных размеров изображений:
function zgwd1010_filter_image_sizes( $sizes) { unset( $sizes['1536x1536']); // отключение промежуточных размеров unset( $sizes['2048x2048']); return $sizes; } add_filter('intermediate_image_sizes_advanced', 'zgwd1010_filter_image_sizes');
Применение
Что делать, если фильтр не работает:
-
Проверка конфликтов: Используйте отключение тем и плагинов для выявления конфликтов. Временно переключите тему на одну из стандартных тем WordPress и отключайте плагины по одному, чтобы выявить виновника.
-
Использование инструментов: Воспользуйтесь плагином WP-Staging для создания тестового сайта, что позволит делать изменения без риска нарушить работу основного сайта.
-
Исследование кода: Проверьте файлы тем и плагинов на наличие установок
big_image_size_threshold
. Возможно, они содержат параметры, переопределяющие ваши настройки. -
Документация и поддержка: Ознакомьтесь с документацией вашей темы и установленными плагинами. Иногда разработчики предоставляют функциональные опции для управления изображениями.
На основе вышеизложенных мер, проблема отключения автоматического масштабирования больших изображений в WordPress должна быть успешно решена. Важно учитывать все взаимодействующие элементы сайта: темы, плагины и настройки, так как они могут значительно влиять на ожидаемое поведение установки фильтра.