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

Shopify Liquid:如何筛选指定颜色产品变体并获取其属性?

问题分析与解决方案

原代码错误原因

你用join和split处理变体对象的方式完全错误。Liquid中,当你把variant对象用join转成字符串时,它会变成ProductVariantDrop这个标识字符串,再split得到的只是一堆字符串,根本不是变体对象,自然无法访问title这类属性。

方案1:修正Liquid代码(无需Jekyll的push)

Shopify Liquid支持用concat过滤器向数组添加元素,不用依赖Jekyll的push。修改后的代码如下:

{% assign blueVariants = '' | split: '' %} <!-- 初始化空数组 -->
{% for variant in product.variants %}
    {% assign colorValue = variant.options[1] %}
    {% if colorValue == 'BLUE' %}
        {% unless blueVariants contains variant %}
            {% assign blueVariants = blueVariants | concat: [variant] %}
        {% endunless %}
    {% endif %}
{% endfor %}

{% for variantBlue in blueVariants %}
    <script>
        console.log("{{ variantBlue.title }}"); <!-- 可正常输出标题 -->
        console.log("{{ variantBlue.available }}"); <!-- 输出是否可用 -->
    </script>
{% endfor %}

方案2:用JavaScript筛选变体

如果Liquid层面处理有局限,直接把所有变体数据输出到JS数组,再用JS筛选更灵活:

<!-- 先把所有变体数据转成JS对象数组 -->
<script>
const allVariants = {{ product.variants | json }};
// 筛选蓝色变体
const blueVariants = allVariants.filter(variant => {
    // options[1]对应颜色,根据实际索引调整
    return variant.options[1] === 'BLUE';
});

// 遍历筛选后的变体,获取属性
blueVariants.forEach(variant => {
    console.log('标题:', variant.title);
    console.log('是否可用:', variant.available);
    // 还可获取价格、SKU等其他属性
    console.log('价格:', variant.price);
});
</script>

这种方法逻辑更直观,JS的数组操作也比Liquid灵活,适合复杂筛选场景。

内容的提问来源于stack exchange,提问作者liz14

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:15:07