Shopify Liquid Theme advance custom field checkbox if-statement 不理解 "true" 为真

Shopify Liquid Theme advance custom field checkbox if-statement did not understand "true" as truthy

我通过高级自定义字段插件在 Shopify 中为我的产品添加了几个复选框。

在主题中,我想遍历这些复选框,只有当复选框被选中时,我才想在此处显示特定的翻译文本。

但是,我无法通过 IF 语句检查复选框是否被选中。

这是我的代码(带有一些调试输出)

<ul>
  {% for field in product.metafields.warnhinweise %}
    {% assign field_first = field | first %}
    {% assign field_last = field | last %}
    <li>ID: {{ field_first }} - Value: {{ field_last }}</li>

    {% assign language_key = 'products.productwarnings.' | append: field_first %}

      {% if field_last == true %}
        <ul>
          <li>ID: {{ field_first }} - Value: {{ field_last }}</li>
          <ul>
            <li>nest the variable output: {{ language_key  | t }}</li>
          </ul>
        </ul>
      {% else %}
        <ul>
          <li>don't show</li>  
        </ul>
      {% endif %}
  {% endfor %}
</ul>

这是输出:

结论:也许 true 不是 truthy?

我也试过这个,检查一个字符串:

{% if field_last == 'true' %}

但这会导致相同的结果。

这是高级自定义字段后端的屏幕截图

这是复选框的示例配置。

我真的很奇怪为什么这么简单的 IF 语句在这里不起作用?

非常感谢您的帮助。

元字段可能未以与您的比较完全匹配的格式存储

当 Shopify 将值打印到您的文档时,有时很难确定基础值的数据类型。例如,如果 true 被打印到文档,是因为值是布尔值 true、字符串 "true"、包含 ['true'] 的值数组、还是别的?

要找出幕后使用的确切值是什么,我建议使用 | json 过滤器来输出您的变量。通过使用 {{ field_last | json }} 之类的东西,Shopify 会将变量转换为 javascript 合法格式,并将包含所有特殊字符(并且引号等特殊字符将被 \ 字符转义), 从而揭示底层结构是什么。

在您的例子中,元字段值看起来像数组。我建议在比较 contains 关键字时切换相等运算符 (==),而不是完全匹配此构造:

{% if field_last contains 'true' %}
  <!-- Cool feature goes here! -->
{% endif %}