如何获取Shopify全站点产品选项/变体?是否有直接实现方式?
全站产品选项与变体的获取方式
核心结论
没有类似collections.all.products.options的直接内置写法能一次性获取全站所有产品的选项/变体并自动完成分类、去重。你必须遍历每个产品,手动提取选项/变体数据后处理重复值。
实现示例(以颜色、尺寸选项为例)
以下是用Liquid代码实现收集全站所有产品的颜色、尺寸选项并去重的示例:
{% assign all_colors = '' | split: ',' %} {% assign all_sizes = '' | split: ',' %} {% for product in collections.all.products %} {% for option in product.options %} {% if option.name == 'Color' %} {% for value in option.values %} {% unless all_colors contains value %} {% assign all_colors = all_colors | push: value %} {% endunless %} {% endfor %} {% elsif option.name == 'Size' %} {% for value in option.values %} {% unless all_sizes contains value %} {% assign all_sizes = all_sizes | push: value %} {% endunless %} {% endfor %} {% endif %} {% endfor %} {% endfor %} <!-- 输出结果 --> <h3>所有颜色:</h3> <ul> {% for color in all_colors %} <li>{{ color }}</li> {% endfor %} </ul> <h3>所有尺寸:</h3> <ul> {% for size in all_sizes %} <li>{{ size }}</li> {% endfor %} </ul>
变体的获取逻辑
如果需要收集全站所有产品的变体(比如变体的SKU、价格等),逻辑类似:遍历每个产品的variants集合,提取所需字段后存入数组,按需去重(比如如果要去重相同SKU的变体):
{% assign all_variants = '' | split: ',' %} {% for product in collections.all.products %} {% for variant in product.variants %} {% assign variant_data = variant.title | append: ' | ' | append: variant.price | append: ' | ' | append: variant.sku %} {% unless all_variants contains variant_data %} {% assign all_variants = all_variants | push: variant_data %} {% endunless %} {% endfor %} {% endfor %}
注意事项
- 遍历
collections.all.products会加载全站所有产品,若站点产品数量极大,可能影响页面加载速度,建议在必要时使用分页或限制产品数量(比如collections.all.products | limit: 100)。 - 选项名称要和后台设置的完全一致(比如后台是"颜色"就不能写"Color"),否则无法匹配。
内容的提问来源于stack exchange,提问作者David Ferguson
相关产品推荐
相关产品推荐

