You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify中通过Liquid遍历重复型高级自定义字段(ACF)输出多元字段值的问题排查

问题:Shopify重复型元字段循环无法输出heading和content内容

我尝试用Liquid循环从Shopify的重复型高级自定义字段(命名空间为faq,包含heading和content字段)中输出数据,当前代码如下:

<div class="feed-faqs">
 {% if page.metafields.faq != blank %}
 {% assign faqs = page.metafields.faq %}
 {% for item in faqs %}
 {% assign i = forloop.index %}
 <div class="item item--{{ i }}">
 {{ heading[i] }}
 {{ content[i] }}
 </div>
 {% endfor %}
 {% endif %}
</div>

但前端只输出了空的item容器:

<div class="feed-faqs">
 <div class="item item--1">
 </div>
 <div class="item item--2">
 </div>
</div>
想请教:这种实现重复型字段多值输出的思路可行吗?如果可行,我获取数据时哪里出错了?

---

### 可行性结论
完全可行!Shopify的list类型元字段(也就是你说的重复型ACF)就是用来存储这类结构化重复数据的,你的核心思路没问题,只是**数据访问的方式错误**。

### 错误分析
1. **误解了元字段的数据结构**:
   你假设`heading`和`content`是两个独立的数组,想用索引`[i]`去取值,但实际上,重复型元字段的结构是一个**对象数组**——每个数组元素(也就是循环里的`item`)本身就包含`heading`和`content`两个属性。

2. **未正确访问循环项的属性**:
   你写的`{{ heading[i] }}`和`{{ content[i] }}`是无效的,因为`heading`和`content`这两个变量根本没有定义,Liquid不知道它们指向哪里。正确的做法是直接从当前循环的`item`对象中读取对应的字段。

### 修正后的代码
```liquid
<div class="feed-faqs">
 {% if page.metafields.faq != blank %}
 {% assign faqs = page.metafields.faq %}
 {% for item in faqs %}
 {% assign i = forloop.index %}
 <div class="item item--{{ i }}">
   <h3>{{ item.heading }}</h3>
   <div class="faq-content">{{ item.content }}</div>
 </div>
 {% endfor %}
 {% endif %}
</div>

额外调试小技巧

如果你不确定元字段的具体结构,可以在模板里临时添加{{ page.metafields.faq | json }}来输出完整的JSON结构,这样就能清晰看到数据的层级关系,快速定位问题。

内容的提问来源于stack exchange,提问作者Graeme Bryson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:14:08