The_post_thumbnail bez srcset?


12

WordPress 4.4 dodaje wiele rozmiarów obrazu srcsetprzy użyciu the_post_thumbnailfunkcji. Czy można uzyskać tylko jeden rozmiar obrazu bez srcset?

Rozumiem, że można dodać filtr, aby wyłączyć srcsetze wszystkich obrazów, ale chcę wyłączyć srcsettylko podczas wywoływania określonego rozmiaru miniatury (na przykład tylko podczas wywoływania pełnego rozmiaru obrazu).

Odpowiedzi:


13

Chcę wyłączyć zestaw srcset tylko podczas wywoływania określonego rozmiaru miniatury (na przykład tylko podczas wywoływania pełnego rozmiaru obrazu).

Oto dwa pomysły (jeśli dobrze cię rozumiem):

Podejście nr 1

Sprawdźmy rozmiar z post_thumbnail_sizefiltra. Jeśli pasuje do odpowiedniego rozmiaru (np. full), Upewniamy się, że $image_metajest pusty, z wp_calculate_image_srcset_metafiltrem. W ten sposób możemy wcześniej wycofać się z wp_calculate_image_srcset()funkcji (wcześniej niż używając filtrów max_srcset_image_widthlub, wp_calculate_image_srcsetaby ją wyłączyć):

/**
 * 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;
}

Jeśli mamy:

the_post_thumbnail( 'full' );

wygenerowany <img>znacznik nie będzie zawierał srcsetatrybutu.

W przypadku:

the_post_thumbnail();

możemy dopasować 'post-thumbnail'rozmiar łańcucha.

Podejście nr 2

Możemy również dodać / usunąć filtr ręcznie za pomocą:

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

prawdopodobnie musisz także usunąć wp_calculate_image_srcset_metafiltr, gdy funkcja się skończy
Mark Kaplun

Dodałem podejście polegające na ręcznym dodawaniu / usuwaniu wywołania zwrotnego filtra. Korzystam z liczenia instancji w drugim podejściu, aby uruchomić je tylko raz dla każdego wywołania the_post_thumbnail () @MarkKaplun
birgire

Uprościłem fragment kodu, dziękuję, że pozwala mi się nad tym ponownie zastanowić ;-) @MarkKaplun
birgire

1
:) Właśnie znalazłem produktywny sposób, aby pokazać swoją niechęć do anonimowych funkcji w filtrach :)
Mark Kaplun

1
lub powinien istnieć parametr „jednorazowego uruchomienia” add_filter. Ten wzór jest bardzo powszechny.
Mark Kaplun,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.