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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:54:24