我created a way在任何给定的收藏页面上按尺寸过滤Shopify商店中的商品。但是,它只适用于尺寸是唯一的变体。
对于我的商店来说这很好,但是因为我已经开源过滤器,所以即使有多个变种,我也希望它只能用于一个变体。
问题似乎是像{% for variant in product.variants %}
这样的行仅适用于一个当前变体(例如大小),但我似乎无法传递大小参数,例如{% for variant in product.variants.size %}
。
我甚至尝试过the recommended variant.option1
(即{% for variant in product.variants.size.option %}
),但无济于事。
即使产品有多种变体,是否有某种方法只输出大小变体数组?
另外,发现这个similar question,但它不足以为我的用例提供解决方案。
答案 0 :(得分:2)
{% capture sizes %}{% endcapture %}
{% for variant in product.variants %}
{% if variant.option1 == 'Size' %}{% capture sizes %}{{ sizes }},{{ variant.option1 }}{% endcapture %}{% endif %}
{% if variant.option2 == 'Size' %}{% capture sizes %}{{ sizes }},{{ variant.option2 }}{% endcapture %}{% endif %}
{% if variant.option3 == 'Size' %}{% capture sizes %}{{ sizes }},{{ variant.option3 }}{% endcapture %}{% endif %}
{% endfor %}
您现在可以使用{{ sizes }}
作为逗号分隔列表,或者替换html的逗号,例如:
{% capture sizes %}{{ sizes }}<li>{{ variant.option1 }}</li>{% endcapture %}
然后您可以使用<ul>{{sizes}}</ul>
将大小列表项输出为ul。
最后,如果您确实需要将大小作为数组,则可以使用split {% assign sizes_array = sizes | split: ',' }}
查看the size filter和the forloops "range" parameter可能会提供一种循环方式。
答案 1 :(得分:0)
以下代码比Dan Webb的高效得多
{% for product_option in product.options_with_values %}
{% if product_option.name == 'Sizes' or product_option.name == 'sizes' or product_option.name == 'size' or product_option.name == 'Size' %}
<ul>
{% for value in product_option.values %}
<li>{{ value }}</li>
{% endfor %}
</ul>
{% endif %}
{% endfor %}
首先,您遍历选项并检查是否有值 然后检查选项名称是否包含大小或大小等 如果是这样-遍历值和输出