选到黑色 XL 之后,主图还是默认的白色款,下面一排缩略图也没变化,价格和库存倒是跟着刷新了,只有图卡着不动。乍看像缓存或者权限的锅,追下去往往不是。
add_filter('woocommerce_available_variation', function ($data, $product, $variation) {
$data['image'] = wp_get_attachment_image_src($variation->get_image_id(), 'woocommerce_single');
return $data;
}, 10, 3);
追下去是这么回事:变体数据通过 woocommerce_available_variation 这个过滤器输出,主题只重写了价格字段,把 image 那一段整个覆盖掉了。前端收到的 variation.image 是空对象,脚本就保留了默认图。
「变体图片不切换」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
具体做法是,在主题里挂 woocommerce_available_variation,把 $variation->get_image_id() 对应的 src 和 srcset 一起放进返回数组;子主题已有同名过滤器时改成追加字段,不要直接 return 自己的数组,父主题的字段会被全冲掉;逐个变体点一遍,没上传变体图的要有回退到父商品主图的逻辑。
验收就看一点,依次点五个颜色变体,主图和缩略图都跟着换,没配图的变体回落到父商品图而不是空白。
