web-dev-qa-db-fra.com

The_post_thumbnail sans srcset?

WordPress 4.4 ajoute plusieurs tailles d’image avec srcset lors de l’utilisation de la fonction the_post_thumbnail. Est-il possible d'obtenir une seule taille d'image sans srcset?

Je comprends qu’il est possible d’ajouter un filtre pour désactiver srcset de toutes les images, mais je souhaite désactiver la srcset uniquement lors de l’appel d’une taille de vignette spécifique (par exemple uniquement lors de l’appel de la taille de l’image complète).

10
jay

Je souhaite désactiver le jeu de paramètres uniquement lors de l'appel d'une taille de vignette spécifique (par exemple, uniquement lors de l'appel d'une taille d'image complète).

Voici deux idées (si je vous ai bien compris):

Approche n ° 1

Vérifions la taille à partir du filtre post_thumbnail_size. S'il correspond à une taille correspondante (par exemple, full), nous nous assurons que le $image_meta est vide, avec le filtre wp_calculate_image_srcset_meta. De cette façon, nous pouvons sortir plus tôt de la fonction wp_calculate_image_srcset() (avant d’utiliser les filtres max_srcset_image_width ou wp_calculate_image_srcset pour la désactiver):

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

Si nous avons:

the_post_thumbnail( 'full' );

alors la balise <img> générée ne contiendra pas l'attribut srcset.

Pour le cas:

the_post_thumbnail();

nous pourrions correspondre à la chaîne de taille 'post-thumbnail'.

Approche # 2

Nous pourrions également ajouter/supprimer le filtre manuellement avec:

// 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