列表型 metafield 在主题里只输出一个商品怎么办
现象#
给商品配了 4 个相关商品的 list.product_reference,前台只显示 1 个,其余为空;换成 list.metaobject_reference 后整块空白。
原因#
- list 类型的 .value 返回数组,直接输出会把所有项拼成一串而不是逐个渲染
- reference 类型的 .value 给的是引用对象,不是 ID 字符串
- 空数组在 Liquid 里为真,用 if metafield.value 判断不出有没有内容
- 引用目标被删除或设为 Draft 后,数组里对应项变成 nil 但仍占位
处理步骤#
- 先
assign items = product.metafields.custom.related.value拿到数组 - 用
{% for item in items %}{{ item.title }}{% endfor %}逐个取字段 - 判空改用
items.size > 0,不要用真假值判断 - 循环里加
{% if item != blank %},跳过已被删除的引用 - GraphQL 侧用
references(first: 10)取对象,别解析 value 里的 JSON
验收标准#
前台渲染数量等于后台配置的 4 个;删掉其中一个引用后剩 3 个且页面不报错。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。