Alok Jain
Alok Jain

Reputation: 3518

Looping through metafields in shopify

I need to display n number of images for a product in shopify.

I have stored number of images in a metafields and created a loop for it.

Then each image's name is stored in a metafield, which i am trying to get with help of loop.

{% assign earrings = product.metafields.earrings %}

{% for i in (1..earrings.total-earrings) %}
  {% assign earring = 'product.metafields.earring-' | append:i %}
  {{ earring.name }}
{% endfor %}

This loop is giving me values for earring like:
product.metafields.earring-1
product.metafields.earring-2

but when i am trying to read value of metafield earring.name, i am not getting any output. I think because product.metafields.earring-1 is a string.

Is there any possible way to loop through metafields like this and get values?

Upvotes: 2

Views: 8810

Answers (2)

Musaib Mushtaq
Musaib Mushtaq

Reputation: 631

So the simple way to loop through all the metafields is here:

CONDITIONS To loop through metafields, you should keep the same namespace, by default Shopify sets "custom" namespace to all metafields. You can keep anything while creating a metafield. Let's assume we will loop through all the metafields with the namespace added as "option", so we have product.metafields.option.KEY.

{% for metafield in product.metafields.option %}
 {% assign key = metafield[0] %}
 {% assign type = product.metafields.option[key].type %}

<!--// Now you got the meta-field's KEY & TYPE, handle it according to its access syntax; for example below, I am printing text of type text-multiline(list.single_line_text_field) meta-field values -->

 {% assign values = product.metafields.option[key].value %}
  {% for value in values %}
   {{ value }}
  {% endfor %}

 {% endfor %}

Upvotes: 1

Alok Jain
Alok Jain

Reputation: 3518

Just in case it's helpful for someone.

Here's the updated code:

{% assign earrings = product.metafields.earrings %}

{% for i in (1..earrings.total-earrings) %}
  {% assign dummy = 'earring-' | append:i %}
  {% assign earring = product.metafields[dummy] %}
  {{ earring.name }}
{% endfor %}

Upvotes: 6

Related Questions