shopify - 循环遍历在 Liquid 中附加 _indexNumber 的元字段,这些元字段需要分配给对象值以匹配特定键

标签 shopify liquid

我有动态数量的元字段进入 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

如果我手动分配元字段并查找特定键,则效果很好。

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

{% 分配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 %}

这会预测性地返回找到匹配项

我要么需要将此字符串转换为一个对象,以便 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 %}

关于shopify - 循环遍历在 Liquid 中附加 _indexNumber 的元字段,这些元字段需要分配给对象值以匹配特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66873245/

相关文章:

javascript - Twitter Bootstrap 选项卡内容始终显示

jekyll - 从 Jekyll 导航栏中排除页面

html - 检查变量是否为 liquid 中的字符串或数组类型

javascript - Shopify 网站上产品 slider 中的图片和视频

ruby - Jekyll - 如何避免在 YAML frontmatter markdownify 项目上添加段落

node.js - shopify-express 续集自定义策略

ruby - 如何使用 Shopify Plus 脚本编辑器应用限制产品/变体数量?

javascript - Shopify FriendBuy 应用程序 javascript 非法 token 问题

ruby - 上传具有多个变体选项的新产品

jekyll - 在 jekyll 生成的帖子中显示原始标签