Le the_post_thumbnail sans srcset?

12

WordPress 4.4 ajoute plusieurs tailles d'image srcsetlors de l'utilisation de la the_post_thumbnailfonction. Est-il possible d'obtenir une seule taille d'image sans srcset?

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

geai
la source

Réponses:

13

Je souhaite désactiver le srcset uniquement lors de l'appel d'une taille de miniature spécifique (par exemple uniquement lors de l'appel de la taille d'image complète).

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

Approche n ° 1

Vérifions la taille du post_thumbnail_sizefiltre. S'il correspond à une taille correspondante (par exemple full), nous nous assurons que le $image_metaest vide, avec le wp_calculate_image_srcset_metafiltre. De cette façon, nous pouvons renflouer tôt la wp_calculate_image_srcset()fonction (avant d'utiliser les filtres max_srcset_image_widthou wp_calculate_image_srcsetpour 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 <img>balise générée ne contiendra pas l' srcsetattribut.

Pour le cas:

the_post_thumbnail();

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

Approche n ° 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' );
Birgire
la source
vous devrez probablement également retirer le wp_calculate_image_srcset_metafiltre à la fin de la fonction
Mark Kaplun
J'ai ajouté l'approche où nous ajoutons / supprimons le rappel du filtre manuellement. J'utilise le comptage d'instances dans l'autre approche pour l'exécuter une seule fois pour chaque appel the_post_thumbnail () @MarkKaplun
birgire
J'ai simplifié l'extrait de code, merci de m'avoir laissé y penser à nouveau ;-) @MarkKaplun
birgire
1
:) Je viens de trouver un moyen productif de montrer mon aversion pour les fonctions anonymes dans les filtres :)
Mark Kaplun
1
ou il doit y avoir un paramètre "exécuter une fois" pour add_filter. Ce modèle est vraiment courant.
Mark Kaplun