全球$content_width
是否影响帖子缩略图
让我们检查一下全局
$content_width
可能影响的输出
the_post_thumbnail( \'large\' )
并找出相关的函数依赖关系:
the_post_thumbnail()
\\
\\__ get_the_post_thumbnail()
\\
\\__ wp_get_attachment_image()
\\
\\__ wp_get_attachment_image_src()
\\
\\__ image_downsize()
\\
\\__ image_constrain_size_for_editor()
对于较大的尺寸,我们有专门的
part 在
image_constrain_size_for_editor()
:
elseif ( $size == \'large\' ) {
/*
* We\'re inserting a large size image into the editor. If it\'s a really
* big image we\'ll scale it down to fit reasonably within the editor
* itself, and within the theme\'s content width if it\'s known. The user
* can resize it in the editor if they wish.
*/
$max_width = intval(get_option(\'large_size_w\'));
$max_height = intval(get_option(\'large_size_h\'));
if ( intval($content_width) > 0 ) {
$max_width = min( intval($content_width), $max_width );
}
}
这里我们可以看到,最大图像宽度是
minimum 大图像大小宽度和全局内容宽度。
这会影响图像的宽度、高度和大小属性。
例如,“大小”属性值来自:
\\__ wp_get_attachment_image()
\\
\\__ wp_get_attachment_image_src()
\\
\\__ wp_calculate_image_sizes()
其中
default value is:
// Setup the default \'sizes\' attribute.
$sizes = sprintf( \'(max-width: %1$dpx) 100vw, %1$dpx\', $width );
在
wp_calculate_image_sizes()
作用这里是
$width
是从
wp_get_attachment_image_src()
输出,这取决于
content width
正如我们前面看到的。
这应该可以解释为什么您会:
(max-width: 560px) 100vw, 560px
自
560 = min( 560, 1024 )
成为最大图像宽度。
// Add a filter callback to avoid the content width restriction
add_filter( \'editor_max_image_size\', \'wpse_max_image_size\', 10, 3 );
// Display large thumbnail
the_post_thumbnail( \'large\' );
// Remove filter callback
remove_filter( \'editor_max_image_size\', \'wpse_max_image_size\', 10 );
我们定义
wpse_max_image_size()
回调为(PHP 5.4+):
function wpse_max_image_size( $max_image_size, $size, $context )
{
// Override content width restriction
if( \'large\' === $size )
{
$max_image_size = [
$max_width = intval( get_option( \'large_size_w\' ) ),
$max_height = intval( get_option( \'large_size_h\' ) )
];
}
return $max_image_size;
}
我们从数据库中获取较大的图像尺寸,因为我猜您修改了
1024
到
980
通过设置媒体屏幕。
注:另一种选择是使用wp_calculate_image_sizes
, 但是,我们仍然需要处理宽度/高度图像属性。
也可以通过wp_get_attachment_image_attributes
滤器
还可以临时修改全局内容宽度,但我在这里避免了这种情况。