webdevqa.jp.net

Srcsetのないthe_post_thumbnail?

the_post_thumbnail関数を使用するとき、WordPress 4.4はsrcsetで複数の画像サイズを追加します。 srcsetを使わずに1つの画像サイズだけを取得することは可能ですか?

すべての画像からsrcsetを無効にするフィルタを追加することは可能ですが、特定のサムネイルサイズを呼び出す場合にのみsrcsetを無効にすることをお勧めします(たとえば、フル画像サイズを呼び出す場合のみ)。

10
jay

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' );
13
birgire