Shopify Liquid技术问询:如何通过SKU数组循环获取对应产品
解决Shopify自定义集合模板通过SKU列表展示产品的问题
你的核心问题是原代码没有正确通过SKU定位到对应的产品实例——在集合模板中,product变量并非指向单个产品,且你没有主动通过SKU去获取目标产品对象。下面提供两种可行的解决方案:
方案1:使用all_products对象(适合SKU数量≤20的场景)
Shopify的all_products对象支持直接通过SKU获取产品实例,代码调整如下:
{% assign product_skus = "1234,5678,9101,1121" | split: ',' %} {% for sku in product_skus %} {% assign target_product = all_products[sku] %} {% if target_product %} {% include "product-tile" with product: target_product %} {% endif %} {% endfor %}
- 逻辑说明:遍历拆分后的SKU数组,用
all_products[sku]直接拉取对应产品;添加if target_product判断,避免SKU不存在时触发报错;通过with product: target_product把产品对象传递给product-tile模板。 - 限制:
all_products最多只能加载20个产品,SKU数量超过20时不适用。
方案2:SKU数量超过20的批量处理方案
如果每月促销的SKU数量较多,推荐结合元字段+智能集合的方式,更高效且无数量限制:
- 给需要加入促销集合的产品添加元字段:
- 命名空间:
custom - 键:
promo_active - 值:
true(布尔类型)
- 命名空间:
- 在Shopify后台创建智能集合,设置规则为:
元字段 -> custom.promo_active 等于 true - 每月更新时,用Shopify批量编辑工具(或第三方批量修改工具),给目标产品的
promo_active元字段设为true,过期产品设为false即可自动更新集合。
另一种备选方案是用搜索API绕过数量限制(适合临时场景):
{% assign product_skus = "1234,5678,9101,1121" | split: ',' %} {% for sku in product_skus %} {% assign search_results = search.search("sku:" | append: sku) %} {% if search_results.products.size > 0 %} {% include "product-tile" with product: search_results.products.first %} {% endif %} {% endfor %}
- 注意:确保SKU在店铺中是唯一的,避免搜索返回多个产品;频繁调用搜索可能影响页面加载速度,不建议大量SKU场景使用。
内容的提问来源于stack exchange,提问作者aw1986
相关产品推荐
相关产品推荐

