Das the_post_thumbnail ohne srcset?

12

Das WordPress 4.4 fügt srcsetbei Verwendung der the_post_thumbnailFunktion mehrere Bildgrößen hinzu . Ist es möglich, nur eine Bildgröße ohne srcset zu erhalten?

Ich verstehe, dass es möglich ist, einen Filter hinzuzufügen, um srcsetalle Bilder zu deaktivieren , aber ich möchte den Filter nur deaktivieren , srcsetwenn eine bestimmte Miniaturbildgröße aufgerufen wird (zum Beispiel nur, wenn die volle Bildgröße aufgerufen wird).

Jay
quelle

Antworten:

13

Ich möchte das srcset nur deaktivieren, wenn eine bestimmte Miniaturbildgröße aufgerufen wird (zum Beispiel nur, wenn die volle Bildgröße aufgerufen wird).

Hier sind zwei Ideen (wenn ich dich richtig verstehe):

Ansatz Nr. 1

Lassen Sie uns die Größe des post_thumbnail_sizeFilters überprüfen . Wenn es einer entsprechenden Größe entspricht (z. B. full), stellen wir sicher, dass das $image_metamit dem wp_calculate_image_srcset_metaFilter leer ist . Auf diese Weise können wir die wp_calculate_image_srcset()Funktion frühzeitig verlassen (früher als die Filter max_srcset_image_widthoder wp_calculate_image_srcset, um sie zu deaktivieren):

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

Wenn wir haben:

the_post_thumbnail( 'full' );

dann enthält das generierte <img>Tag das srcsetAttribut nicht.

Im Falle:

the_post_thumbnail();

Wir könnten die 'post-thumbnail'Größenfolge anpassen.

Ansatz Nr. 2

Wir können den Filter auch manuell hinzufügen / entfernen mit:

// 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
quelle
Sie müssen wahrscheinlich auch den wp_calculate_image_srcset_metaFilter entfernen , wenn die Funktion endet
Mark Kaplun
Ich habe den Ansatz hinzugefügt, bei dem wir den Filterrückruf manuell hinzufügen / entfernen. Ich benutze die Instanzzählung im anderen Ansatz, um sie nur einmal für jeden the_post_thumbnail () -Aufruf @MarkKaplun
birgire
Ich habe das Code-Snippet vereinfacht, danke, dass ich noch einmal darüber nachdenken durfte
;-)
1
:) Ich habe gerade einen produktiven Weg gefunden, um meine Abneigung gegen anonyme Funktionen in Filtern zu zeigen :)
Mark Kaplun
1
oder es sollte einen "einmal ausführen" -Parameter geben add_filter. Dieses Muster ist wirklich häufig.
Mark Kaplun