Shopify 主题与 Liquid

Shopify Liquid where 多条件筛选为什么只生效一个

现象#

集合页写 where: 'available', true, 'product_type', '衬衫',结果仍列出缺货商品;两个条件分开单独测试时又都正常。

原因#

  • where 只接受一个属性名和一个目标值,后面多写的参数被忽略,不会自动取交集
  • 第二个属性名被当成参数值参与比较,实际判断的仍是第一个属性
  • 商品标签是数组,等值比较不会做包含判断,where 永远匹配不到
  • 链式过滤时把中间结果赋回 collection.products,后续条件作用在错误的对象上

处理步骤#

  1. 改成链式调用,每个过滤器只负责一个条件:{% assign list = collection.products | where: 'available', true | where: 'type', '衬衫' %}
  2. 价格区间、标签包含这类条件改用 {% for %} 内嵌 {% if %},不满足时 continue
  3. 判断标签用 product.tags contains 'sale',不要拿 where 比较数组
  4. 每步后用 {{ list.size }} 打印数量,确认过滤结果递减
  5. 把结果 assign 到新变量,别覆盖 collection.products 本身

验收标准#

集合页商品数等于后台同时满足两个条件的数量;临时取消其中一个商品的勾选,刷新后它立即从列表消失。

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