Shopify Liquid where 多条件筛选为什么只生效一个
现象#
集合页写 where: 'available', true, 'product_type', '衬衫',结果仍列出缺货商品;两个条件分开单独测试时又都正常。
原因#
- where 只接受一个属性名和一个目标值,后面多写的参数被忽略,不会自动取交集
- 第二个属性名被当成参数值参与比较,实际判断的仍是第一个属性
- 商品标签是数组,等值比较不会做包含判断,where 永远匹配不到
- 链式过滤时把中间结果赋回 collection.products,后续条件作用在错误的对象上
处理步骤#
- 改成链式调用,每个过滤器只负责一个条件:
{% assign list = collection.products | where: 'available', true | where: 'type', '衬衫' %} - 价格区间、标签包含这类条件改用
{% for %}内嵌{% if %},不满足时 continue - 判断标签用
product.tags contains 'sale',不要拿 where 比较数组 - 每步后用
{{ list.size }}打印数量,确认过滤结果递减 - 把结果 assign 到新变量,别覆盖
collection.products本身
验收标准#
集合页商品数等于后台同时满足两个条件的数量;临时取消其中一个商品的勾选,刷新后它立即从列表消失。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。