遍历在 liquid 中附加 _indexNumber 的元字段,需要将其分配给对象值以匹配特定键

loop through metafields appending _indexNumber in liquid that need to be assigned to an object value to match to a specific key

我有一个动态数量的元字段进入 Shopify。我有一个特殊的元字段,它告诉我要查找多少个元字段文件,我用它来指定循环数量。

我需要遍历这些元字段并查找特定的匹配键。

numfiles 这里的变量来自那个元字段,它给我循环遍历的元字段文件总数。

我试过:

{% for i in (1..numfiles) %}
 {% assign currentMetafield = 'shop.metafields.field_name.value_name_' | append: i %}
 {% if currentMetafield['key_i_am_matching'] %}
  found a match
 {% else %}
  no match found :(
 {% endif %}
{% endfor %}

但是这不起作用,我的猜测是它不起作用,因为分配的 currentMetafield 最终是一个字符串。

我尝试打印出来自循环 {{currentMetafield}} 的值,并且其输出与我的元字段名称正确匹配。它看起来像这样:

shop.metafields.field_name.value_name_1
shop.metafields.field_name.value_name_2
shop.metafields.field_name.value_name_3

如果我手动分配元字段并查找特定键,就可以正常工作。

假设我知道第一个元字段文件中有一个特定的键。我可以这样分配它

{% assign metafield1 = shop.metafields.field_name.value_name_1 %}

那我可以这样做:

{% if shop.metafields.field_name.value_name_1['key_i_am_looking_for'] %}
  found a match
{% end if %}

这 returns found a match 预测。

我需要将此字符串转换为一个对象以便 shopify 将其识别为正确的元字段文件,或者我需要执行其他操作以尝试在动态数量的元字段中找到匹配项。

感谢您的帮助!

您需要为动态值使用捕获。试试这个代码

{% for i in (1..numfiles) %}
{% capture value %}value_name_{{i}}{% endcapture %}
 {% assign currentMetafield = shop.metafields.field_name[value]%}
 {% if currentMetafield['key_i_am_matching'] %}
  found a match
 {% else %}
  no match found :(
 {% endif %}
{% endfor %}