WordPress 特色图片应该用多大尺寸?
大多数人想要的答案是 1200 x 630 像素——这是 Facebook、LinkedIn 和 X 在链接预览中使用的 1.91:1 比例。但这并不是你的主题实际显示的尺寸
发布于
大多数人想要的答案是 1200 x 630 像素。这是 Facebook、LinkedIn 和 X 在链接预览中使用的比例(1.91:1),也是 Open Graph 图片应该采用的尺寸。如果你设置特色图片主要是为了让分享出去的链接显示正常,用 1200 x 630 就够了,到此为止。
但这个尺寸并不是你的主题在文章里实际显示的尺寸。WordPress 很少按原始尺寸显示你的特色图片。主题会请求某个已注册的图片尺寸,然后 WordPress 提供与之匹配的预先生成的裁切版本。这就是为什么一张在 Facebook 上看起来完美的图片,在你的单篇文章模板里却可能发虚、被拉伸,或者裁切位置不对。所谓”正确”的尺寸取决于主题,而不是什么放之四海皆准的规则。
为什么主题会覆盖这个尺寸
当你上传一张图片时,WordPress 并不是只存一个文件。它会运行 wp_generate_attachment_metadata(),为每一个已注册的图片尺寸生成一个派生版本:三个默认尺寸(thumbnail、medium、large)、区块编辑器用的 medium_large(宽 768px),再加上主题或插件通过 add_image_size() 注册的任何尺寸。
一个想要宽幅 16:9 头图的主题,会在 functions.php 里写类似这样的代码:
add_theme_support( 'post-thumbnails' );
add_image_size( 'hero-featured', 1200, 675, true );
第四个参数 true 表示硬裁切(hard crop)。WordPress 会把你的图片精确裁切成 1200 x 675,把塞不进 16:9 框里的部分统统丢掉。如果你的主体靠近画面顶部或底部,就会被切掉。设为 false(或省略)时,它会按比例缩放,最终尺寸可能和你要求的不一样。
然后模板决定调用哪个尺寸:
the_post_thumbnail( 'hero-featured' );
传给 the_post_thumbnail() 的名称对应哪个裁切版本,就渲染哪个。所以你网站上真正的特色图片尺寸,是由两处你没有亲手写的地方定义的:add_image_size() 调用和主题里的 the_post_thumbnail() 调用。上传更大的文件,这两处都不会改变。
还有一层。WordPress 会提供 srcset,所以在较小的屏幕上,浏览器可能加载 medium 或 large 派生版本,而不是完整的裁切版本。你在开发者工具里看到的尺寸,往往不是你上传的那个。
按顺序解决问题
1. 搞清楚你的主题到底请求的是什么尺寸。 在瞎猜之前,先看看 WordPress 从你的图片生成了哪些尺寸,以及哪一个是裁切后的头图。把你的图片拖进 WordPress 图片尺寸工具——它会按精确的像素尺寸显示 WP 会创建的每一个派生版本,这样你就能让源文件去匹配真实的目标尺寸,而不是那个虚构的 1200x630。
2. 上传的图片要大到足以覆盖最大的裁切尺寸。 如果主题的头图是 1200 x 675,就至少上传这么大,最好是 2 倍以适配高清屏(2400 x 1350)。WordPress 缩小时画质干净利落;它从不放大。源图太小是特色图片发虚最常见的单一原因。
3. 让你的宽高比匹配主题的裁切比例。 如果主题硬裁切成 16:9,就喂给它 16:9。构图时把主体放在中间,这样硬裁切才不会把人的脑袋切掉。
4. 如果注册的尺寸不对,就改掉它并重新生成。 在子主题里修改 add_image_size() 的数值,然后重建现有的缩略图——在你执行下面这步之前,新尺寸只对将来上传的图片生效:
wp media regenerate --yes
没有 WP-CLI?Regenerate Thumbnails 插件在后台就能完成同样的事。
不要这样做
不要以为随便上传一张 1200x630 的图片就万事大吉了。 如果主题注册的尺寸是 16:9,WordPress 会把你 1.91:1 的图片硬裁切,顶部和底部就丢了。Open Graph 的尺寸和显示尺寸是两码事。
不要为了”保留原图”而禁用 WordPress 的图片尺寸。 有人会看到建议说把中间尺寸设为 0,或者解除 the_post_thumbnail 的挂钩。结果主题就退而调用完整尺寸的文件,让浏览器缩小显示——一张 4000px 的 JPEG 被发送到手机上。这会拖垮你的加载速度和 Core Web Vitals。这些派生版本的存在是有原因的。
不要用插件的”推荐尺寸”来盖过你主题实际注册的尺寸。 SEO 插件为 OG 标签推荐 1200x630,对那个标签来说是对的。但它对你的单篇文章模板裁切成什么样只字未提。
改完尺寸后不要跳过 wp media regenerate。 修改 add_image_size() 对已经上传的图片不起任何作用。这是大家会忘掉的一步,然后就得出结论说代码没生效。
还是搞不定?
如果匹配了尺寸、重新生成之后图片还是不对,问题通常出在裁切模式(true 还是 false),或者 srcset 提供了一个比你预期更小的派生版本。把文件拖进图片尺寸工具,看看你的配置到底生成了哪些裁切版本,然后在开发者工具里对照浏览器实际加载的是哪个。让这两者匹配上,猜谜游戏就结束了。