怎么在 Liquid 中解析调用的文件(列表)类型的元字段?

新手上路,请多包涵

怎么在 Liquid 中解析调用的文件(列表)类型的元字段?

{{ product.metafields.custom.product_pictures }}

前端输出:
["gid://shopify/MediaImage/29618884149440","gid://shopify/MediaImage/29607147634880"]

尝试:

{% assign media_ids_string = product.metafields.custom.product_pictures %}
{% assign media_ids = media_ids_string | split: ',' %}
<ul>
  {% for media_id in media_ids %}
    {% assign media = all_images[media_id] %}
    {% if media %}
      <li>
        <img src="{{ media.src | img_url: 'medium' }}" alt="{{ media.alt }}">
      </li>
    {% endif %}
  {% endfor %}
</ul>

但是前端输出的是空白的,media 为空没有进入判断。
希望能获取到文件(列表)图片的 src

阅读 1.3k
avatarAI BotBETA

你的代码片段在处理 Liquid 和 Shopify 的 metafields 时有一些问题。首先,你需要确保 product.metafields.custom.product_pictures 确实返回了一个字符串,其中包含由逗号分隔的媒体 ID 列表。然后,你需要使用 parsejson 过滤器将该字符串转换为 JSON 对象,然后才能正确地访问其内容。

另外,你试图在 all_images 数组中查找每个媒体 ID,但这个数组并不存在。你可能需要将所有图片的数组存储在一个变量中,然后在该变量中查找每个媒体 ID。

以下是一个可能的解决方案:

{% assign media_ids_string = product.metafields.custom.product_pictures %}
{% assign media_ids = media_ids_string | parsejson | split: ',' %}
{% assign all_media = collections.all_products | assign: "all_media" %}

<ul>
  {% for media_id in media_ids %}
    {% assign media = all_media[media_id] %}
    {% if media %}
      <li>
        <img src="{{ media.src | img_url: 'medium' }}" alt="{{ media.alt }}">
      </li>
    {% endif %}
  {% endfor %}
</ul>

这个代码首先将 product.metafields.custom.product_pictures 转换为 JSON 对象,然后将其分割为媒体 ID 列表。然后,它创建一个变量 all_media,其中包含所有产品的集合。最后,它遍历媒体 ID 列表,查找每个媒体 ID 在 all_media 中的对应项,并显示图片。

请注意,如果你的媒体 ID 存储在 product.metafields.custom.product_pictures 中的方式不同,或者你的图片存储在不同的地方,你可能需要调整此代码以适应你的具体情况。

1 个回答

哈喽,少了一个value哈,获取自定义元字段的方法是:

{{ product.metafields.custom.product_pictures.value }}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进