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' );

вам, мабуть, потрібно також зняти wp_calculate_image_srcset_metaфільтр, коли функція закінчиться
Марк Каплун

Я додав підхід, коли ми додаємо / видаляємо зворотний виклик фільтра вручну. Я використовую підрахунок екземплярів в іншому підході, щоб запустити його лише один раз для кожного виклику____подання () @MarkKaplun
birgire

Я спростив фрагмент коду, дякую, що дозволив мені ще раз подумати над цим ;-) @MarkKaplun
birgire

1
:) Я щойно знайшов продуктивний спосіб проявити свою неприязнь до анонімних функцій у фільтрах :)
Марк Каплун

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