Как отключить адаптивные изображения в WordPress 4.4?
Я успешно перевел свою установку WordPress 4.3.1 полностью на HTTPS. После обновления до версии 4.4 у меня возникла проблема с новым атрибутом srcset
. В то время как атрибут src
для изображений установлен с использованием HTTPS, атрибут srcset
использует HTTP. Это приводит к тому, что браузеры вообще не отображают изображения.
В ожидании лучшего решения, я хочу полностью отключить установку атрибута srcset
, чтобы все изображения имели только атрибут src
. Как это сделать?

Вот несколько способов, которые можно попробовать для отключения поддержки адаптивных изображений в WordPress 4.4:
/**
* Отключение поддержки адаптивных изображений (тест!)
*/
// Очистка атрибутов изображения из wp_get_attachment_image()
add_filter( 'wp_get_attachment_image_attributes', function( $attr )
{
if( isset( $attr['sizes'] ) )
unset( $attr['sizes'] );
if( isset( $attr['srcset'] ) )
unset( $attr['srcset'] );
return $attr;
}, PHP_INT_MAX );
// Переопределение рассчитанных размеров изображений
add_filter( 'wp_calculate_image_sizes', '__return_empty_array', PHP_INT_MAX );
// Переопределение рассчитанных источников изображений
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );
// Удаление адаптивных функций из контента
remove_filter( 'the_content', 'wp_make_content_images_responsive' );
но, как упомянул @cybmeta, проблема может быть в другом.
Принудительное использование HTTPS в srcset
Вы можете провести отладку с помощью фильтра wp_calculate_image_srcset
и попробовать этот быстрый фикс:
add_filter( 'wp_calculate_image_srcset', function( $sources )
{
foreach( $sources as &$source )
{
if( isset( $source['url'] ) )
$source['url'] = set_url_scheme( $source['url'], 'https' );
}
return $sources;
}, PHP_INT_MAX );
чтобы установить схему URL на https
. Другой подход - использовать схему без указания протокола //
.
Смотрите в Кодексе другие set_url_scheme()
варианты:
$source['url'] = set_url_scheme( $source['url'], null );
$source['url'] = set_url_scheme( $source['url'], 'relative' );
Но вам стоит попытаться копнуть глубже и найти коренную причину.
Обновление:
Мы можем выйти раньше из функции wp_calculate_image_srcset()
с помощью:
add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );
затем используя фильтры wp_calculate_image_srcset
или max_srcset_image_width
.
Также обновлено в соответствии с тикетом #41895, чтобы возвращать пустой массив вместо false/null.

Просто чтобы подтвердить, что оба подхода сработали так, как и задумывалось: отключение srcset убрало атрибут srcset (и тем самым вернуло 'фиксированные' изображения), а принудительное использование https изменило URL в srcset на https. Оба подхода устранили предупреждение о смешанном содержимом.

Решение add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
отлично сработало у меня. Спасибо!

Это вызовет предупреждения в валидаторе: "Атрибут sizes может быть указан только если также присутствует атрибут srcset."

Самый простой и чистый способ сделать это — просто добавить следующий код:
add_filter( 'wp_calculate_image_srcset', '__return_false' );
Как уже отмечали многие, использование srcset — это хорошая практика и будущее веб-разработки (уже считается лучшей практикой). Но если вам нужно быстрое решение, чтобы сайт продолжал работать, приведённый выше код отлично справится с задачей без каких-либо хаков.
источник: Блог WP Core

Просто используйте __return_false
вместо disable_srcset
, в WordPress есть функции для таких простых задач.

И вы оба могли бы улучшить свой код, не создавая целую новую функцию только для возврата false. WordPress предоставляет функции для этого. https://codex.wordpress.org/Function_Reference/_return_false

Это правильное решение. Эта функция продумана примерно так же хорошо, как wp_autop. Я использую <picture> для арт-дирекшна и адаптивных изображений, и это решение не учитывает этот случай.

@Jake по шкале от 1 до 10, "создание новой функции только для возврата false" добавляет около -2 баллов к раздуванию WordPress. Самодокументируемый код, который может понять любой (не только WP-разработчик), имеет определенную ценность.

@MahmoudAl-Qudsi Потому что '__return_false' - это так запутанно? Это обсуждение на форуме WordPress о том, как отключить функцию WordPress. Не безумие просто использовать стандартные, очень простые и хорошо документированные встроенные функции WordPress для этого. То, что функция называется "return_false", уже является самодокументирующим. Попробуйте угадать, что она делает?

Скорее всего, причина того, что URL-адреса в ваших атрибутах srcset
некорректно отображают HTTPS, заключается в том, что URL-адреса для всех изображений строятся на основе значения опции siteurl в таблице wp_options. Если ваш фронтенд работает через HTTPS, вам также следует изменить эти значения (через Настройки > Общие).
Вот связанный тикет в системе отслеживания проблем WordPress: https://core.trac.wordpress.org/ticket/34945

Это отключит код srcset, исключив любые изображения шире 1 пикселя.
add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );
В долгосрочной перспективе лучше попытаться исправить саму проблему. Однако этот способ работает, если вам нужно быстрое решение.


В разделе Настройки/Общие убедитесь, что Адрес WordPress (URL) и Адрес сайта (URL) установлены на https://yourdomain.com
Смотрите http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-while-using-ssl
Джо МакГилл, который помогал внедрять адаптивные изображения в WordPress, также ответил в ветке форума и подтвердил, что предложение Кри верно: "Если вы используете HTTPS на фронтенде, вам следует изменить URL для домашнего и сайтового адресов в Настройки > Общие, чтобы они использовали схему HTTPS", - сказал он.
