Як відключити чуйні зображення в WP 4.4?


37

Я успішно конвертував свою установку 4.3.1 на всі https. Після оновлення до 4.4. У мене проблема з новим srcsetатрибутом. У той час як srcатрибут для зображень встановлюється за допомогою https, srcsetатрибут http. Це призводить до того, що веб-переглядачі взагалі не показують зображення.

Дочекавшись кращого виправлення, я хочу srcsetвзагалі відключити налаштування атрибуту, щоб усі зображення мали лише srcатрибут. Як це зробити?


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


Здається, зараз добре очищено. Вибачення за подвійне опублікування - коренева проблема (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.


Тільки щоб підтвердити, що обидва підходи працювали так, як кожен призначений для мене, відключити srcset видалив srcset (і так повернув «виправлені» зображення), а сила https змінила URL-адреси srcset на https. Обидва підходи зняли попередження про змішаний вміст.
brokkr

4
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );Рішення працював великий для мене. Дякую!
Тім Боуен

Радий почути, що це допомогло.
birgire

Це спричинить попередження у валідаторі: "Атрибут розмірів може бути вказаний, лише якщо атрибут srcset також присутній."
Майкл Роджерс

Це здається, що ви відфільтрували srcset, але не атрибут розмірів. @MichaelRogers
birgire

13

Найпростіший і чистий спосіб це зробити просто:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Щоб повторити те, про що говорять більшість інших людей, srcset - це добра ідея і це майбутнє (найкраща практика зараз), але якщо вам потрібно швидко виправити, щоб ваш сайт працював, наведений вище фрагмент виконує цю роботу без будь-яких злому.

джерело: WP Core Blog


5
Просто використовуйте __return_falseзамість disable_srcset, wp має функції для таких простих завдань.
Джейк

3
І ви обидва могли вдосконалити свій код, не зробивши абсолютно нової функції просто для повернення помилки. WordPress надає функції для цього. codex.wordpress.org/Function_Reference/_return_false
Джейк

1
Це правильне рішення. Ця функція приблизно так само продумана, як wp_autop. Я використовую <малюнок>, щоб отримати художнє керівництво, а також чуйні зображення, і це не вирішує цього питання.
Пітер Вустер

1
@Jake за шкалою від 1 до 10, "створення нової функції просто для повернення помилкових" додає WordPress приблизно -2 розриву. Код самодокументування, який може зрозуміти кожен (не лише розробник WP), має певне значення.
Махмуд Аль-Кудсі

1
@ MahmoudAl-Qudsi Оскільки "__return_false" настільки заплутаний? Ця дискусія на форумі WordPress стосується вимкнення функції WordPress. Це не шалено просто використовувати стандартні, дуже базові та добре задокументовані функції повернення WordPress, вбудовані в WordPress, щоб це зробити. Той факт, що функція названа "return_false", є досить документуванням. Спробуйте і відгадайте, що це робить?
Джейк

7

Швидше за все, причина в URL-адресах ваших srcsetатрибутів неправильно відображає HTTPS в тому, що URL-адреси всіх зображень побудовані за допомогою значення параметраururl у таблиці wp_options. Якщо ви обслуговуєте передню частину через HTTPS, вам слід також змінити ці значення (через Налаштування> Загальні).

Ось відповідний квиток у системі відстеження випусків WordPress: https://core.trac.wordpress.org/ticket/34945


5

Це дозволить вимкнути код srcset, усунувши будь-які зображення ширше 1 пікселя.

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

Зрештою, слід спробувати виправити фактичну проблему. Все-таки це працює, якщо вам потрібно швидко виправити.



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 ", - сказав він.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.