我正在修改一个主题,使用一个子主题,在一个模板文件(single.php)中,我需要显示一个大的帖子缩略图,所以我有以下代码:
the_post_thumbnail(\'large\');
在设置>媒体中,大尺寸设置为最大宽度=1024px,最大高度=1024px(我想这是Wordpress中的默认设置)。现在的问题是,在帖子页面中,我得到了以下html代码:
<img src="https://example.com/wp-content/uploads/2018/07/example-image-4-1024x682.jpg"
class="attachment-large size-large wp-post-image" alt=""
srcset="https://www.example.com/wp-content/uploads/2018/07/example-image-4-1024x682.jpg 1024w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4-300x200.jpg 300w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4-768x512.jpg 768w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4-272x182.jpg 272w,
https://www.example.com/wp-content/uploads/2018/07/example-image-4.jpg 1280w"
sizes="(max-width: 800px) 100vw, 800px" width="800" height="533">
结果是我得到了一幅800px宽的图片,而不是一幅真正的“大”图片,它应该是1024px宽。问题似乎出在将最大宽度设置为800px的“size”属性和将图像设置为800px的“width”属性中。这些对我来说似乎是错的。那么到底发生了什么?如果它是由主题中的某些内容引起的,我如何找出它在哪里,以便我可以更改它?
查看与\\u post\\u缩略图()相关的文档,我看到了以下过滤器:
post\\u thumbnail\\u size
post\\u thumbnail\\u html
wp\\u get\\u attachment\\u image\\u attributes
因此,我尝试在主题中查找字符串“post\\u缩略图”和“attachment\\u image”,但没有找到任何有用的内容。那么我还需要什么呢?请注意,我安装了一些插件(如高级自定义文件等),但我尝试停用它们,但问题仍然存在,因此我认为问题的根源一定是主题,或者我不了解Wordpress的某些内容。
最合适的回答,由SO网友:Jacob Peattie 整理而成
为具有以下功能的图像生成宽度和高度属性时the_post_thumbnail()
或wp_get_attachment_image()
图像通过image_downsize()
作用此函数所做的最后一件事是通过image_constrain_size_for_editor()
作用
此函数根据给定的大小决定图像的宽度和高度,large
在您的情况下,基于“设置”>“媒体”中的设置。但是,它将设置的最大可能大小为medium
, medium_large
和large
无论主题是什么Content Width 定义为。如果主题将内容宽度定义为800
然后使用medium
, medium_large
或large
大小将其宽度限制为800(在编辑器中,自定义图像大小仅受此影响)。
如果要删除最大尺寸,可以使用editor_max_image_size
筛选以返回包含所需最大宽度和高度的数组,或0
两人都要取消限制。您可以使用$size
和$context
要仅应用于的筛选器的参数large
前端或后端的图像(\'display\'
对于前端,\'edit\'
对于管理员)。
此示例将删除的大小限制large
前端图像:
function wpse_308298_max_image_size( $max_image_size, $size, $context ) {
if ( $size === \'large\' && $context === \'display\' ) {
$max_image_size = [0,0];
}
return $max_image_size;
}
add_filter( \'editor_max_image_size\', \'wpse_308298_max_image_size\' );