跳到正文
图片与多媒体

WooCommerce 产品图片尺寸:三个尺寸分别是什么,以及怎么真正改掉它们

搞清楚 WooCommerce 的三个产品图片尺寸里你实际能改的是哪两个、目录缩略图为什么裁得难看,以及怎么把它们全部重新生成。

发布于

你上传的每一张产品照片,WooCommerce 都会生成三个图片尺寸,而其中只有两个能在 WordPress 后台里改。woocommerce_thumbnail 是目录网格图,woocommerce_single 是产品页上的大图,woocommerce_gallery_thumbnail 是主图下面那一小排缩略图。修改的位置在 外观 > 自定义 > WooCommerce > 产品图片——如果这个面板只给了你一个裁切下拉框、却没有宽度输入框,那是你的主题在代码里故意锁死了宽度。

三个尺寸

尺寸名出现在哪里裁切方式能否在自定义器里改
woocommerce_thumbnail商店页、分类网格、相关产品、交叉销售默认硬裁切成正方形宽度和比例
woocommerce_single单个产品页上的主图不裁切——保留原始宽高比只有宽度
woocommerce_gallery_thumbnail产品主图下方的小排缩略图硬裁切成正方形不能

这些是叠加在 WordPress 标准尺寸之上的。一张产品照通常会产出 thumbnailmediummedium_largelarge、三个 WooCommerce 尺寸,还可能有主题通过 add_image_size 注册的额外尺寸。每次上传要生成的文件相当多,这也是为什么导入 300 个产品要花那么久。

图库缩略图是最让人意外的一个:它完全没有后台控件。默认安装下它是一个小方块,历史上是 100px,也是最容易在视网膜屏上显得发虚的尺寸,因为这个文件确实太小了。

设置到底在哪里

外观 > 自定义 > WooCommerce > 产品图片 给了你三个控件:

  • 主图宽度——woocommerce_single 的宽度。高度是自动的,所以原始宽高比会被保留。
  • 缩略图宽度——woocommerce_thumbnail 的宽度。
  • 缩略图裁切——1:1(正方形,默认)、自定义(自己填一个比例,比如 4:3)或者 不裁切

注意少了什么:目录缩略图没有高度输入框,因为高度是由裁切比例推出来的。而图库缩略图则完全没有任何选项。

改动之前,先看清一个具体文件到底会产出哪些派生尺寸会很有帮助——把一张真实的产品照丢进 WordPress 图片尺寸工具,你就能拿到完整清单,包括你的源图是否大到足以在不放大的前提下填满每一个尺寸。

你的目录图片为什么看着不对

目录缩略图会硬裁切成正方形。硬裁切的意思是,WooCommerce 从你的照片里取出正中的一个正方形,其余全部丢掉——它不会加黑边,也不会压扁。一张 2000x1200 的产品照会变成从中间切出来的 1200x1200,然后再缩小。

对于一瓶摆在正中、四周留白的产品照,这没问题。但对下面这些情况就是灾难:

  • 长条形产品(滑雪板、线缆、窗帘杆)——你只能看见中间那三分之一
  • 主体偏离中心的构图——产品跑到画面边缘,被切掉一块
  • 主体铺满整个画面的照片——上下被切没了
  • 产品位于角落的场景图

常见的建议是”把裁切改成不裁切”。这确实有效,但代价要说清楚:不裁切意味着每张缩略图都保留自己的宽高比,于是横竖混杂的网格看起来就参差不齐,除非你主题的 CSS 能处理不等高,否则每一行都对不齐。大多数主题都假定图片是正方形。

如果条件允许,更好的办法是在源头解决:统一用正方形产品照,主体居中、留白均匀。这样正方形硬裁切等于什么都没做,后面所有环节都是可预期的。改裁切设置是权宜之计;统一的源图才是真正的解决方案。

当主题锁死了宽度

如果你的”产品图片”面板只提供裁切选项,说明你的主题在注册 WooCommerce 支持时声明了固定宽度:

add_theme_support( 'woocommerce', array(
    'single_image_width'    => 800,
    'thumbnail_image_width' => 400,
) );

主题传入这些值时,WooCommerce 会把宽度控件从自定义器里移除,只留下比例。这不是 bug,也不是主题在为难你——主题的产品布局 CSS 就是围着这些具体像素宽度写的,让你随便改会把网格搞乱。

你可以在子主题的 functions.php 里用针对单个尺寸的过滤器覆盖它们:

add_filter( 'woocommerce_get_image_size_single', function ( $size ) {
    $size['width']  = 1000;
    $size['height'] = '';
    $size['crop']   = 0;
    return $size;
} );

add_filter( 'woocommerce_get_image_size_gallery_thumbnail', function ( $size ) {
    $size['width']  = 150;
    $size['height'] = 150;
    $size['crop']   = 1;
    return $size;
} );

同样的写法也适用于 woocommerce_get_image_size_thumbnail。而且这也是修改图库缩略图的唯一途径,因为它没有界面。

把代价直说了:覆盖一个被锁死的宽度,意味着 WooCommerce 生成的文件不再和主题 CSS 预期的对得上。多数情况下图片只是在浏览器里缩放一下,看着没事,因为它现在比容器还大。但有时候主题用的是固定高度的容器,你就会看到黑边或者溢出。先在一个产品上测试,再去重新生成那 2000 张。

改了尺寸就得重新生成

每一项尺寸设置都只影响新上传的图片。已有产品会继续输出它们上传当时生成的文件,所以在你重建之前,前台不会有任何变化。

保存自定义器时,WooCommerce 会启动一个后台重新生成任务。小目录上这就够了。大目录上它取决于 WP-Cron 能否可靠触发,而低流量店铺往往做不到,结果你得到一个只重建了一半的图库。还是自己跑吧:

wp media regenerate --yes

只重建产品图片:

wp media regenerate --yes --post_type=product

如果你想在手动处理时把后台任务先挡掉:

add_filter( 'woocommerce_background_image_regeneration', '__return_false' );

重新生成有两件事不会做。它不会删掉旧文件——你的上传目录会留着之前设置下产生的每一个无用派生文件,而且只会越攒越多。另外,它也没法生成比源图更大的尺寸,因为 WordPress 不放大图片。如果你把主图宽度设成 1200,而产品照只有 800px 宽,那么 1200px 的文件根本不会生成;浏览器拿到 800px 的文件去拉伸,srcset 也拿不出更好的选择。

到底该上传多大的图

目标是正方形源图,尺寸大约是你配置的最大宽度的两倍——600px 主图配 1200x1200,主题用 800px 就配 1600x1600。这既覆盖了 2 倍视网膜屏,也给了 WordPress 足够的像素去生成每一个派生尺寸而不用放大。让所有产品保持同样的尺寸,网格才会整齐。

还是没解决?

如果尺寸配置正确、也重新生成过了,某个产品看起来还是不对,那就在新标签页里打开这张图,读一下文件名。如果尺寸后缀跟你配置的任何一个尺寸都对不上,说明是别的东西注册了它。完全没有后缀,则说明 WooCommerce 退回用了原始尺寸文件,这几乎总是意味着源图对你要的那个尺寸来说太小了。把那个源文件放进图片尺寸工具跑一遍,把 WordPress 应该生成的东西和浏览器实际加载的东西对比一下——两者对不上时,中间通常坐着一个图片优化插件或者 CDN 的图片处理服务。

FAQ

常见问题

WooCommerce 的三个产品图片尺寸是哪三个?

WooCommerce 注册了 woocommerce_thumbnail 用于目录和商店网格,woocommerce_single 用于产品页上的大图,woocommerce_gallery_thumbnail 用于主图下方那一小排缩略图。你上传的每一张产品照片都会生成这三个尺寸,此外还有 thumbnail、medium、medium_large、large 这些 WordPress 标准尺寸。

在哪里修改 WooCommerce 的产品图片尺寸?

进入外观 > 自定义 > WooCommerce > 产品图片。你会看到主图宽度、缩略图宽度,以及 1:1、自定义、不裁切三种缩略图裁切方式。如果宽度输入框不见了、只剩裁切选项,说明你启用的主题在代码里写死了宽度,自定义器是故意把它们藏起来的。

为什么我的 WooCommerce 目录图片裁得很难看?

目录缩略图默认硬裁切成正方形,从照片正中间取。任何主体不在正中、或者铺满整个画面的产品照,两端都会被切掉。把缩略图裁切改成不裁切,或者重新拍摄,给源图留出均匀的留白,这样正中的方形裁切仍然能包含完整的产品。

改完 WooCommerce 图片尺寸后需要重新生成缩略图吗?

需要。改设置只会影响之后上传的图片,所有已有产品在你重建之前都会继续输出旧文件。保存自定义器时 WooCommerce 会启动一个后台重新生成任务,但在大目录上,它比你自己用 WP-CLI 跑一遍更慢也更不可靠。

为什么我在主题里改不了主图宽度?

主题在声明支持 WooCommerce 时传入了固定宽度,这等于告诉 WooCommerce 把那些控件从自定义器里移除。这是有意为之,因为主题的 CSS 就是围着这些具体的像素宽度写的。你可以在子主题里用过滤器覆盖它们,但产品页布局可能因此需要相应调整 CSS。

WooCommerce 产品图片应该用多大尺寸?

上传正方形源图,尺寸大约是你最大显示宽度的两倍,也就是 600 像素的主图配 1200 x 1200 像素的源图,并且保持所有产品一致。WordPress 从不放大图片,所以源图小于你配置的宽度时,那个尺寸的文件根本不会生成,浏览器只能拿一个更小的文件拉伸凑数。