如何仅通过Liquid在Shopify中展示商品及变体的已售数量
Shopify纯Liquid实现商品销量展示方案
纯Liquid无法直接调用平台订单接口做实时的顾客、销量统计,通过你提到的「初始库存+调整库存-当前库存」的差值计算逻辑完全可行,所有自定义数值通过Shopify原生元字段存储,支持后台手动更新,不需要额外第三方应用。
第一步:创建自定义存储字段
在Shopify后台自定义数据的商品分类下,创建3个数字类型的元字段,用来存计算需要的手动维护值:
custom.initial_stock:商品初始上架时的总库存,首次配置后不需要改动custom.adjusted_stock:商品上架后累计补入的库存总量,每次补货后手动更新为累计补货值即可custom.daily_base_stock:(仅需要24小时展示样式时配置)统计周期起始时点的商品总库存,按你设定的统计周期(比如24小时、7天)固定时间手动更新
另外可以在主题设置里加一个数字输入项,配置全局默认的单客平均购买件数(普通实物商品默认填1.2即可),用来从售出件数估算下单顾客数;如果商品客单件数差异大,也可以单独给商品加custom.avg_items_per_order元字段做单独配置。
第二步:核心计算代码
把下面的代码放到商品详情页模板对应文件里,你想要展示销量的位置即可:
{% comment %} 计算商品所有变体当前总库存 {% endcomment %} {% assign current_total_inventory = 0 %} {% for variant in product.variants %} {% assign current_total_inventory = current_total_inventory | plus: variant.inventory_quantity %} {% endfor %} {% comment %} 读取自定义库存配置,计算累计售出数据 {% endcomment %} {% assign initial_stock = product.metafields.custom.initial_stock | default: 0 %} {% assign adjusted_stock = product.metafields.custom.adjusted_stock | default: 0 %} {% assign total_sold = initial_stock | plus: adjusted_stock | minus: current_total_inventory %} {% if total_sold < 0 %}{% assign total_sold = 0 %}{% endif %} {% comment %} 优先读取商品级单客平均件数,没有则取全局主题配置,计算累计顾客数 {% endcomment %} {% assign avg_items = product.metafields.custom.avg_items_per_order | default: settings.avg_items_per_order | default: 1.2 %} {% assign total_customers = total_sold | divided_by: avg_items | round %} {% comment %} 计算周期内(默认24小时)售出数据 {% endcomment %} {% assign cycle_base_stock = product.metafields.custom.daily_base_stock | default: current_total_inventory %} {% assign cycle_sold = cycle_base_stock | minus: current_total_inventory %} {% if cycle_sold < 0 %}{% assign cycle_sold = 0 %}{% endif %} {% assign cycle_customers = cycle_sold | divided_by: avg_items | round %}
第三步:展示样式调用
根据需要选择对应展示代码放在计算逻辑后面即可:
- 累计订购样式:
<p>已有<code>{{ total_customers }}</code>位顾客订购该商品</p>
- 周期售出样式(默认24小时,你更新
daily_base_stock的周期决定实际统计时长):
<p>24小时内已向<code>{{ cycle_customers }}</code>位顾客售出<code>{{ cycle_sold }}</code>件商品</p>
注意事项
- 如果你的商品是单变体(没有SKU选项),可以删掉遍历变体算库存的代码,直接用
{% assign current_total_inventory = product.variants.first.inventory_quantity %},页面加载速度更快 - 所有元字段配置完成后,直接在商品编辑页就能更新数值,不需要修改代码
- 如果不想高频更新24小时基准库存,可以把统计周期改成7天,每周固定时间更新一次
daily_base_stock即可,展示文案对应改成“7天内”就行 - 计算出来的数值如果小于0会自动归0,避免初始值填错出现负数销量的异常展示
内容的提问来源于stack exchange,提问作者D Shah
相关产品推荐
相关产品推荐

