Как отключить адаптивные изображения в WP 4.4?

37

Я успешно конвертировал мою 4.3.1 установку во все https. После обновления до 4.4. У меня проблема с новым srcsetатрибутом. Хотя srcатрибут для изображений устанавливается с помощью https, srcsetатрибутом является http. Это заставляет браузеры вообще не отображать изображения.

В ожидании лучшего исправления я хочу отключить настройку srcsetатрибута в целом, чтобы все изображения имели только srcатрибут. Как я могу это сделать?

brokkr
источник
2
Я также хотел бы знать это - это только сделало правильный беспорядок нашего веб-сайта!
Крис
Я безуспешно пробовал разные способы, но хотел оставить главный вопрос открытым для новых подходов. Самой радикальной из моих попыток было комментирование add_filterстроки, которую default-filters.phpя считал ответственной://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokkr
1
Вместо того чтобы отключать адаптивные изображения, вы должны искать то, что смешивает HTTP и HTTPS, потому что функциональность адаптивных изображений не является источником проблемы. Все мои сайты находятся под HTTPS и srcsetправильно созданы WordPress. Как вы перешли с HTTP на HTTPS?
cybmeta
См. Core.trac.wordpress.org/ticket/25449 .
Артем Руссаковский
Кажется, теперь все хорошо прояснилось. Извиняюсь за двойную публикацию - проблема с корнем (srcset должен использовать https) также решена в теме, которую я начал с wordpress.org ( wordpress.org/support/topic/… ). В мою защиту поток казался довольно мертвым через день или поэтому, когда это было возрождено. Спасибо joemcgill, который решил это там.
Brokkr

Ответы:

43

Вот несколько вещей, которые вы можете попробовать удалить поддержку адаптивных изображений в 4.4:

/**
 * Disable responsive image support (test!)
 */

// Clean the up the image from 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 );

// Override the calculated image sizes
add_filter( 'wp_calculate_image_sizes', '__return_empty_array',  PHP_INT_MAX );

// Override the calculated image sources
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );

// Remove the reponsive stuff from the content
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.

birgire
источник
Просто чтобы подтвердить, что оба подхода работали так, как каждый был предназначен для меня, отключение srcset удалило srcset (и таким образом вернуло «фиксированные» образы), и сила https изменила URL-адреса srcset на https. Оба подхода убрали предупреждение о смешанном контенте.
brokkr
4
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );Решение работал большой для меня. Спасибо!
Тим Боуэн
Рад слышать, что это помогло.
Birgire
Это приведет к появлению предупреждений в валидаторе: «Атрибут sizes может быть указан только в том случае, если также присутствует атрибут srcset».
Майкл Роджерс
Похоже, вы отфильтровали srcset, но не атрибуты sizes. @MichaelRogers
birgire
13

Самый простой и чистый способ сделать это просто так:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Чтобы повторить то, что говорит большинство других людей, srcset - это хорошая идея и будущее (лучшая практика сейчас), но если вам нужно быстрое исправление, чтобы ваш сайт работал, приведенный выше фрагмент делает работу без какого-либо взлома.

источник: WP Core Blog

Тревор
источник
5
Просто используйте __return_falseвместо disable_srcset, wp есть функции для простых задач, как это.
Джейк
3
И вы оба могли бы улучшить свой код, не создавая совершенно новую функцию просто для возврата false. WordPress предоставляет функции для этого. codex.wordpress.org/Function_Reference/_return_false
Джейк
1
Это правильное решение. Эта функция примерно так же продумана, как и wp_autop. Я использую <picture>, чтобы получить художественное руководство, а также адаптивные изображения, и это не решает эту проблему.
Питер Вустер
1
@ Джейк в масштабе от 1 до 10, «создание новой функции просто для возврата ложного» добавляет около 2 раздувания в WordPress. Самодокументируемый код, который может понять каждый (не только разработчик WP), имеет определенную ценность.
Махмуд Аль-Кудси
1
@ MahmoudAl-Qudsi Потому что «__return_false» так запутанно? Это обсуждение на форуме WordPress об отключении функции WordPress. Это не безумие - просто использовать стандартные, очень простые и хорошо документированные функции возврата WordPress, встроенные в WordPress. Тот факт, что функция называется return_false, довольно самодокументирован. Попробуйте угадать, что он делает?
Джейк
7

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

Вот соответствующий тикет в системе отслеживания проблем WordPress: https://core.trac.wordpress.org/ticket/34945

joemcgill
источник
5

Это отключит код srcset, удалив изображения шириной более 1 пикселя.

add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );

В долгосрочной перспективе вы должны попытаться решить актуальную проблему. Тем не менее, это работает, если вам нужно быстрое решение.

эфирное масло
источник
1
create_function()
Питер Гусен
1
Как насчет create_function ()? Мне также нравятся мои ответы для работы в PHP 5.2.
Отто
2

В разделе «Настройки / Общие» убедитесь, что для вашего адреса 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-адреса для своего дома и сайта. URL в меню «Настройки»> «Общие», чтобы они использовали схему HTTPS », - сказал он.

user2969141
источник