同一个可配置商品在中文 Store 可以选择颜色和尺码,英文 Store 却显示 “Choose an Option” 但下拉为空。父子关联通常是全局的,差异更多来自网站/Store 范围下子商品是否可售、属性选项标签是否存在,或主题生成配置 JSON 时过滤。

先确认父子关联没有变

在后台可配置商品的 Configurations 中查看关联简单商品,并确认它们分配到当前 Website。只在另一个 Website 有分配的子商品,不会成为当前 Store 的有效组合。

检查 Store 级状态与属性值

子商品 status 可能在目标 Store 被覆盖为禁用;颜色/尺码属性值也可能被导入为空。属性 option_id 应一致,Store View 只翻译 label。若翻译行缺失应回退默认标签,不应创建新的业务 option 代替翻译。

库存筛选

目标 Website 对应不同 Stock 时,所有子 SKU 可能在该 Stock 不可售。检查 sales channel、source、reservation 和“Display Out of Stock Products”配置。不要只看默认 Stock。

查看页面的配置 JSON

在页面源码或 Network 中找到 configurable 的 option/config 数据。JSON 已经没有子商品,问题在服务端集合与索引;JSON 正确而组件为空,查主题 JS、翻译字符和 mixin。这样比反复清缓存更快。

索引与缓存

重建 product EAV、price、inventory/search 相关索引可作为诊断;若重建后又失效,继续查增量触发。FPC/CDN 必须区分 Store 和必要上下文,不能把一个 Store 的空配置缓存给另一个。

修复后覆盖所有属性组合、缺货子项、两种语言、客户组价与加入购物车请求,确认选择的 simple SKU 正确。

Super Attribute 配置

父商品的 configurable attribute 必须属于属性集、用于创建 configurable,并与关联子商品的值对应。属性范围或 backend type 被修改后,一个 Store 的索引/缓存可能暴露异常。检查父商品 super attribute 记录,不要重新创建同 code 的第二个属性。

价格缺失也会过滤组合

某客户组/Website 的子商品 price index 缺行时,配置 JSON 可能排除该 SKU。对比 catalog_product_index_price 的 website_id/customer_group_id,并测试登录与匿名;如果只对一个客户组消失,问题不在翻译标签。

导入流程

CSV/ERP 更新子商品时要保留父子关联、网站分配和属性 option_id。用标签文本跨语言匹配容易创建错误值。导入后自动运行增量索引并抽查组合数量,防止一夜同步再次清空选项。

对比两个 Store 的最小差异

导出父商品、一个正常子商品和一个缺失子商品在两个 Store 的有效属性值、status、website、stock 与价格索引,做逐字段差异。不要一次重存全部商品,那会把问题暂时“治好”却丢掉根因,也可能覆盖翻译和人工配置。