The_post_thumbnail tanpa srcset?

12

WordPress 4.4 menambahkan beberapa ukuran gambar dengan srcsetsaat menggunakan the_post_thumbnailfungsi. Apakah mungkin untuk mendapatkan hanya satu ukuran gambar tanpa srcset?

Saya mengerti bahwa mungkin untuk menambahkan filter untuk menonaktifkan srcsetdari semua gambar, tetapi saya ingin menonaktifkan srcsethanya ketika memanggil ukuran thumbnail tertentu (misalnya hanya ketika memanggil ukuran gambar penuh).

jay
sumber

Jawaban:

13

Saya ingin menonaktifkan srcset hanya saat memanggil ukuran thumbnail tertentu (misalnya hanya saat memanggil ukuran gambar penuh).

Berikut adalah dua ide (jika saya mengerti Anda dengan benar):

Pendekatan # 1

Mari kita periksa ukurannya dari post_thumbnail_sizefilter. Jika cocok dengan ukuran yang sesuai (mis. full) Maka kami pastikan $image_metakosong, dengan wp_calculate_image_srcset_metafilter. Dengan begitu kita dapat menebus lebih awal dari wp_calculate_image_srcset()fungsi (lebih awal daripada menggunakan max_srcset_image_widthatau wp_calculate_image_srcsetfilter untuk menonaktifkannya):

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

Jika kita memiliki:

the_post_thumbnail( 'full' );

maka <img>tag yang dihasilkan tidak akan mengandung srcsetatribut.

Untuk kasus ini:

the_post_thumbnail();

kita bisa mencocokkan 'post-thumbnail'string ukuran.

Pendekatan # 2

Kami juga dapat menambah / menghapus filter secara manual dengan:

// 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
sumber
Anda mungkin perlu juga menghapus wp_calculate_image_srcset_metafilter saat fungsi berakhir
Mark Kaplun
Saya menambahkan pendekatan tempat kami menambahkan / menghapus filter panggilan balik secara manual. Saya menggunakan penghitungan instance dalam pendekatan lain untuk menjalankannya hanya sekali untuk setiap the_post_thumbnail () panggilan @MarkKaplun
birgire
Saya menyederhanakan cuplikan kode, terima kasih telah mengizinkan saya memikirkan hal ini lagi ;-) @MarkKaplun
birgire
1
:) Saya baru saja menemukan cara yang produktif untuk menunjukkan ketidaksukaan saya terhadap fungsi anonim di filter :)
Mark Kaplun
1
atau harus ada parameter "jalankan satu kali" ke add_filter. Pola ini sangat umum.
Mark Kaplun