it-swarm-eu.dev

The_post_thumbnail bez srcset?

WordPress 4.4 přidává více velikostí obrázků s srcset při použití funkce the_post_thumbnail. Je možné získat pouze jednu velikost obrázku bez srcsetu?

Rozumím, že je možné přidat filtr pro zakázání srcset ze všech obrázků, ale chci vypnout srcset pouze při volání určité velikosti miniatury (například pouze při volání plné velikosti obrázku).

10
jay

Chci vypnout srcset pouze při volání určité velikosti miniatury (například pouze při volání plné velikosti obrazu).

Zde jsou dva nápady (pokud vám správně rozumím):

Přístup č. 1

Podívejme se na velikost z filtru post_thumbnail_size. Pokud odpovídá odpovídající velikosti (např. full), pak se ujistěte, že $image_meta je prázdné, s filtrem wp_calculate_image_srcset_meta. Tímto způsobem můžeme z funkce wp_calculate_image_srcset() (dříve než pomocí filtrů max_srcset_image_width nebo wp_calculate_image_srcset vypnout filtry) předčasně odejít:

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

Pokud máme:

the_post_thumbnail( 'full' );

pak vygenerovaná značka <img> nebude obsahovat atribut srcset.

Pro případ:

the_post_thumbnail();

mohli bychom odpovídat řetězci velikosti 'post-thumbnail'.

Přístup # 2

Můžeme také přidat/odebrat filtr ručně 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' );
13
birgire