Shopify 主题与 Liquid

Shopify Liquid for 循环未结束怎么排查

表现#

集合页、商品推荐或购物车行循环只输出一部分,或直接抛出 for tag was never closed。有时页面能开,但 forloop.index 行为怪异,末尾残留未渲染的 Liquid 原文。

为何会发生#

{% for item in collection.products %} 必须用 {% endfor %} 结束。漏写 endfor、在循环内 return 式地过早 endfor、或把 endfor 写进被 if 包住的分支导致部分路径未闭合,都会触发。嵌套双层 for 时,内层 endfor 误删会让外层“看起来少一个结束标签”。分页场景下若在 paginate 与 for 之间交叉闭合,解析器同样报错。

处理顺序#

  1. 打开报错模板(常见 sections/main-collection.liquid、snippets/card-product.liquid),搜索所有 for 与 endfor,核对数量与嵌套层次。
  2. 用缩进对齐嵌套:外层循环完整包住内层,禁止交叉闭合。
  3. 若循环包在 paginate 内,确认结构为 paginate → for → endfor → endpaginate。参见 for 标签 与 paginate。
  4. 需要提前跳出视觉输出时,用 if 包住输出而非提前 endfor。
  5. 大集合注意 for 的 limit/offset 或分页,避免一次渲染过多节点拖慢 TTFB。
  6. 预览多页分页与空集合两种边界,确认无残留标签字符。

如何算修好#

主题可保存;集合首页与末页、空集合均无 Liquid 报错;卡片数量与后台商品数(在 limit 内)一致。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。