srcsetのないthe_post_thumbnail?


12

WordPress 4.4ではsrcsetthe_post_thumbnail関数の使用時に複数の画像サイズが追加されます。srcsetなしで1つの画像サイズのみを取得することは可能ですか?

srcsetすべての画像から無効にするフィルターを追加することは可能であることを理解していますがsrcset、特定のサムネイルサイズを呼び出すときのみ(たとえば、画像全体のサイズを呼び出すときのみ)を無効にしたいと思います。

回答:


13

特定のサムネイルサイズを呼び出す場合のみ(たとえば、画像全体のサイズを呼び出す場合のみ)srcsetを無効にしたい。

ここに2つのアイデアがあります(私があなたを正しく理解している場合)。

アプローチ#1

post_thumbnail_sizeフィルターからサイズを確認してみましょう。対応するサイズ(例:)と一致する場合は、フィルターfullを使用して、$image_metaが空であることを確認しwp_calculate_image_srcset_metaます。このようにして、wp_calculate_image_srcset()関数から早期に救済することができます(max_srcset_image_widthまたはwp_calculate_image_srcsetフィルターを使用して無効にする前に)。

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

私たちが持っている場合:

the_post_thumbnail( 'full' );

生成された<img>タグにはsrcset属性が含まれません。

ケース:

the_post_thumbnail();

'post-thumbnail'サイズ文字列と一致させることができます。

アプローチ#2

フィルターを手動で追加/削除することもできます:

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

wp_calculate_image_srcset_meta関数が終了したらフィルターも削除する必要があるでしょう
Mark Kaplun

フィルターコールバックを手動で追加/削除する方法を追加しました。私は他のアプローチでインスタンスカウントを使用して、the_post_thumbnail()呼び出しごとに1回だけ実行します@MarkKaplun
バージール

コードスニペットを簡略化しました。これについてもう一度考えさせてくれてありがとう;-) @MarkKaplun
バージリー

1
:)私はフィルターで匿名関数に対する嫌悪感を示す生産的な方法を見つけました:)
Mark Kaplun

1
またはに「1回実行」パラメータが必要add_filterです。このパターンは本当に一般的です。
Mark Kaplun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.