Personalized checkout and custom promotions with Shopify Scripts
Hi,
I’m having issues looping through a metaobject which is further defined by a list metafield.
I’ve created a metaobject called specifications_table which contains an array of single line fields such as:
I’ve then referenced this metaobject as a list metafield definition specifications.table
As you may have guessed, it’s being used to generate a product specification table. Some products have variants that require multiple tables (hence the metafield is using list).
Data looks like this
Table A specifications_table.width - 1000mm specifications_table.length- 1100mm specifications_table.height- 1200mm specifications_table.depth- 1300mm Table B specifications_table.width - 1400mm specifications_table.length- 1500mm specifications_table.height- 1600mm specifications_table.depth- 1700mm
The only way I can output the values so far is manually call each named index, but this doesn’t allow for future expansion such as adding weight without manually altering the table.
As it is currently:
{% if product.metafields.specifications.table != blank %}
{% for specificationObject in product.metafields.specifications.table.value %}
<table>
{% if specificationObject.width!= blank %}
<tr>
<td>Width:</td>
<td>{{ specificationObject.width }}</td>
</tr>
{% endif %}
{% if specificationObject.length!= blank %}
<tr>
<td>Length:</td>
<td>{{ specificationObject.length}}</td>
</tr>
{% endif %}
....manually repeating/hardcoding the above for all fields
</table>
{% endfor %}
{% endif %}
How I’d like it to be:
{% if product.metafields.specifications.table != blank %}
{% for specificationObject in product.metafields.specifications.table.value %}
<table>
{% for specificationObjectValue in specificationObject.value %}
<tr>
<td>{{specificationObjectValue.index_name}}:</td><-- is it possible to print the index name?
<td>{{ specificationObjectValue.value}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
{% endif %}
Is there a way to do the above or is it a lost cause? When I try
{% for specificationObjectValue in specificationObject.value %}
It results in nothing
When I try:
{% for specificationObjectValue in specificationObject %}
I get just one iteration of below (even though there are 3 items:
* table: ["gid://shopify/Metaobject/202727326061","gid://shopify/Metaobject/202727457133","gid://shopify/Metaobject/202727522669"]
Natively I’m a PHP developer and this would be achieved with:
<?php for($specificationObject as $specificationObjectValue){ ?> <table> <?php for($specificationObjectValue as $key => $value){ ?> <tr> <td><?=$key ;?>:</td><-- is it possible to print the index name? <td><?=$value;?></td> </tr> <?php } ?> </table> <?php } ?>
June brought summer energy to our community. Members jumped in with solutions, clicked ...
By JasonH Jun 5, 2025Learn how to build powerful custom workflows in Shopify Flow with expert guidance from ...
By Jacqui May 7, 2025Did You Know? May is named after Maia, the Roman goddess of growth and flourishing! ...
By JasonH May 2, 2025