Shopify元字段数组使用Liquid concat过滤器失效问题求助
解决Shopify元字段数组使用concat过滤器失效的问题
问题原因
Shopify的list.product_reference和list.variant_reference类型元字段返回的不是原生Liquid数组,而是Shopify自定义的集合(Collection)对象。这类对象虽然能被循环遍历,但concat过滤器仅接受标准Liquid数组作为参数,直接拼接就会触发报错。
解决方法
方法一:手动循环构建数组(兼容性最优)
先初始化一个空数组,再分别遍历两个元字段的内容,将每个元素推入数组:
{%- assign items = '' | split: '' -%} {%- for product in product.metafields.custom.fcv_products.value -%} {%- assign items = items | push: product -%} {%- endfor -%} {%- for variant in product.metafields.custom.fcv_variants.value -%} {%- assign items = items | push: variant -%} {%- endfor -%}
通过这种方式得到的items是标准Liquid数组,可正常进行后续操作。
方法二:使用to_a过滤器转换(简化写法)
部分Shopify环境支持用to_a过滤器将集合对象直接转为原生数组,可尝试以下写法:
{%- assign products = product.metafields.custom.fcv_products.value | to_a -%} {%- assign variants = product.metafields.custom.fcv_variants.value | to_a -%} {%- assign items = products | concat: variants -%}
注意:若主题或Shopify版本不支持to_a,此方法会失效,优先推荐方法一。
补充说明
之前区块设置的数组可以正常使用concat,是因为区块的数组配置返回的是原生Liquid数组,与元字段返回的集合对象类型不同。
内容的提问来源于stack exchange,提问作者tmechsner
相关产品推荐
相关产品推荐

