Srcset içermeyen the_post_thumbnail?


12

WordPress 4.4 srcset, the_post_thumbnailişlev kullanılırken birden çok görüntü boyutu ekler . Srcset olmadan yalnızca bir görüntü boyutu elde etmek mümkün müdür?

srcsetTüm resimlerden devre dışı bırakmak için bir filtre eklemek mümkün olduğunu anlıyorum , ancak srcsetyalnızca belirli bir küçük resim boyutunu çağırırken (örneğin yalnızca tam görüntü boyutunu çağırırken) devre dışı bırakmak istiyorum .

Yanıtlar:


13

Yalnızca belirli bir küçük resim boyutu (örneğin yalnızca tam görüntü boyutu aranırken) çağrılırken srcset'i devre dışı bırakmak istiyorum.

İşte iki fikir (eğer seni doğru anlarsam):

Yaklaşım # 1

post_thumbnail_sizeFiltreden boyutu kontrol edelim . Karşılık gelen bir boyuta (örneğin full) uyuyorsa $image_meta, wp_calculate_image_srcset_metafiltreyle birlikte boş olduğundan emin oluruz . Bu şekilde wp_calculate_image_srcset()işlevden erken yararlanabiliriz ( devre dışı bırakmak için max_srcset_image_widthveya wp_calculate_image_srcsetfiltrelerini kullanmadan önce ):

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

Eğer sahipsek:

the_post_thumbnail( 'full' );

oluşturulan <img>etiket srcsetözelliği içermez .

Dava için:

the_post_thumbnail();

'post-thumbnail'boyut dizesiyle eşleşebiliriz .

Yaklaşım # 2

Filtreyi manuel olarak aşağıdakilerle ekleyebilir / kaldırabiliriz:

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

muhtemelen wp_calculate_image_srcset_metaişlev sona erdiğinde filtreyi de kaldırmanız gerekir
Mark Kaplun

Filtre geri aramasını manuel olarak eklediğimiz / kaldırdığımız yaklaşımı ekledim. Diğer yaklaşımdaki örnek saymayı her bir the_post_thumbnail () çağrısı için @MarkKaplun
birgire

Kod snippet'ini basitleştirdim, bunu tekrar düşünmeme izin verdiğiniz için teşekkürler ;-) @MarkKaplun
birgire

1
:) Ben sadece filtrelerdeki anonim işlevlere sevmediğim göstermek için verimli bir yol buldum :)
Mark Kaplun

1
veya "bir kez çalıştır" parametresi olmalıdır add_filter. Bu kalıp gerçekten yaygın.
Mark Kaplun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.