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

Shopify Liquid中正确筛选区分应税商品的实现方案

问题根因

原有Liquid筛选写法失效,是因为基础where过滤器仅支持匹配对象的顶层单值属性。taxable是商品对象下variants数组内的变体子属性,不属于商品的顶层属性,无法被基础where直接识别匹配。

实现方案

使用Liquid内置的where_exp过滤器在集合层面完成筛选即可,不需要在遍历循环内写额外if判断做补丁,也不需要使用contain操作符。

筛选包含至少1个非应税变体的商品

{% assign non_taxable_products = collections.all.products | where_exp: "product", "product.variants.any? { |v| v.taxable == false }" %}
{% for product in non_taxable_products %}
  <!-- 写入商品渲染逻辑 -->
{% endfor %}

筛选所有变体均为非应税的商品

如果需求是提取全量变体都属于非应税类目的商品,替换判断条件为全量匹配规则即可:

{% assign fully_non_taxable_products = collections.all.products | where_exp: "product", "product.variants.all? { |v| v.taxable == false }" %}
{% for product in fully_non_taxable_products %}
  <!-- 写入商品渲染逻辑 -->
{% endfor %}

直接提取所有非应税变体对象

如果需要跳过商品维度,直接拿到所有非应税的变体列表,可以先打平变体数组再用基础where筛选:

{% assign all_variants = collections.all.products | map: 'variants' | flatten %}
{% assign non_taxable_variants = all_variants | where: 'taxable', false %}
{% for variant in non_taxable_variants %}
  <!-- 写入变体渲染逻辑 -->
{% endfor %}
补充说明
  • 上述筛选逻辑在集合赋值阶段完成,和后续渲染逻辑完全解耦,不属于遍历过程中加判断跳过的补丁式实现
  • any?、all?、flatten、map均为Liquid原生内置方法,全Shopify主题环境兼容,无需额外引入自定义逻辑

内容的提问来源于stack exchange,提问作者Gulshan S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:36:38