Answers:
我想仅在调用特定缩略图大小时(例如仅在调用完整图像大小时)禁用srcset。
这里有两个想法(如果我理解正确的话):
让我们从post_thumbnail_size
过滤器中检查尺寸。如果它与相应的大小匹配(例如full
),则请确保$image_meta
使用wp_calculate_image_srcset_meta
过滤器将其清空。这样,我们可以尽早从wp_calculate_image_srcset()
函数中解脱出来(比使用max_srcset_image_width
or 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'
大小字符串。
我们还可以使用以下方法手动添加/删除过滤器:
// 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' );
add_filter
。这种模式确实很常见。
wp_calculate_image_srcset_meta
在函数结束后删除过滤器