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

如何通过字符串创建Liquid变量?Shopify模板取值问题求助

解决Shopify Liquid中动态元字段访问的问题

你遇到的报错和nil问题,本质是Liquid不允许标签嵌套,而且直接用字符串捕获无法解析成实际的元字段引用。我们来一步步解决:

为什么原来的写法行不通?

  1. 标签嵌套错误:你在{% if %}标签里嵌套了{{ }}输出标签(sf_{{ collection.title | downcase }}),Liquid的语法规则不允许在{% %}控制标签内部直接使用{{ }}输出标签,这就是你看到Unexpected character '{'报错的原因。
  2. Capture只是存字符串:你用capture把variant.metafields.sf_{{...}}[meta_tag_key]存成了字符串,但Liquid不会自动把这个字符串解析为实际的元字段引用,所以test变量只是一段文本,自然拿不到真实值。

正确的解决方案:动态属性访问

Liquid支持用变量作为键来访问对象的属性,我们可以先拼接出元字段的命名空间,再用方括号语法访问:

{% comment %} 1. 拼接元字段的命名空间:sf_ + 小写的collection标题 {% endcomment %}
{% assign meta_namespace = 'sf_' | append: collection.title | downcase %}

{% comment %} 2. 动态访问元字段的值 {% endcomment %}
{% assign meta_value = variant.metafields[meta_namespace][meta_tag_key] %}

{% comment %} 3. 进行值判断 {% endcomment %}
{% if meta_value == 1 %}
  <!-- 这里放你要执行的内容,比如显示特定元素 -->
{% elsif meta_value == 0 %}
  <!-- 值为0时的逻辑 -->
{% endif %}

额外检查点

如果还是拿到nil,可以排查这几点:

  • 确认collection.title转小写后的结果,和你在SuperFields里设置的元字段命名空间完全一致(注意空格、特殊字符是否被正确处理)
  • 确认该元字段确实关联到了当前的variant对象上,而不是product或者其他对象
  • 可以临时输出{{ meta_namespace }}来验证拼接后的命名空间是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:21