The_post_thumbnail без srcset?

12

WordPress 4.4 добавляет несколько размеров изображения srcsetпри использовании the_post_thumbnailфункции. Можно ли получить только один размер изображения без srcset?

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

сойка
источник

Ответы:

13

Я хочу отключить srcset только при вызове определенного размера миниатюры (например, только при вызове полного размера изображения).

Вот две идеи (если я вас правильно понимаю):

Подход № 1

Давайте проверим размер из post_thumbnail_sizeфильтра. Если это соответствует соответствующему размеру (например full), тогда мы удостоверимся, что $image_metaпустой, с wp_calculate_image_srcset_metaфильтром. Таким образом, мы можем выйти из wp_calculate_image_srcset()функции рано (раньше, чем использовать фильтры max_srcset_image_widthили wp_calculate_image_srcsetдля ее отключения):

/**
 * Remove the srcset attribute from post thumbnails 
 * that are called with the 'full' size string: the_post_thumbnail( 'full' )
 *
 * @link http://wordpress.stackexchange.com/a/214071/26350
 */
 add_filter( 'post_thumbnail_size', function( $size )
 {
     if( is_string( $size ) && 'full' === $size )
         add_filter( 
             'wp_calculate_image_srcset_meta',  
              '__return_null_and_remove_current_filter' 
         );   
    return $size;
 } );

// Would be handy, in this example, to have this as a core function ;-)
function __return_null_and_remove_current_filter ( $var )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return null;
}

Если у нас есть:

the_post_thumbnail( 'full' );

тогда сгенерированный <img>тег не будет содержать srcsetатрибут.

Для случая:

the_post_thumbnail();

мы могли бы соответствовать 'post-thumbnail'размеру строки.

Подход № 2

Мы также можем добавить / удалить фильтр вручную:

// Add a filter to remove srcset attribute from generated <img> tag
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );

// Display post thumbnail
the_post_thumbnail();

// Remove that filter again
remove_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
birgire
источник
Вам, вероятно, нужно также удалить wp_calculate_image_srcset_metaфильтр, когда функция завершится
Марк Каплун
Я добавил подход, в котором мы добавляем / удаляем фильтр обратного вызова вручную. Я использую подсчет экземпляров в другом подходе, чтобы запустить его только один раз для каждого вызова the_post_thumbnail () @MarkKaplun
birgire
Я упростил фрагмент кода, спасибо, что позволили мне снова подумать об этом ;-) @MarkKaplun
birgire
1
:) Я только что нашел продуктивный способ показать свою неприязнь к анонимным функциям в фильтрах :)
Марк Каплун
1
или должен быть параметр «запустить один раз» add_filter. Эта модель действительно распространена.
Марк Каплун