Array Filter Where not working on market metafield

Array Filter Where not working on market metafield

neilmojo
Shopify Partner
3 0 1

We have a metafield called market.metafields.custom.available_product_variants which contains a list of variants for particular international markets. and no matter what we try we seem unable to apply a filter to it to reduce the number of items returned to get under the Shopify 50 limit. 

 

We can assign localization.market.metafields.custom.available_product_variants.value (using localization to get a specific market) as so: 

{% assign selected_variants = localization.market.metafields.custom.available_product_variants.value %}

 

and then we can loop through the array using FOR to output: 

 

{% for variant in selected_variants %}
<p>Market Variant ID: {{ variant.id }}</p>
<p>Market Variant Title: {{ variant.title }}</p>
<p>Market Variant Product ID: {{ variant.featured_image.product_id }}</p>
<p>Product ID: {{ product.id }}</p>
{% endfor %}

 

We're including the product.id in order to check that we can output that as well - and it outputs as expected

 

We've tried numerous different ways and followed the documentation https://shopify.dev/docs/api/liquid/filters/where but nothing seems to work, as soon as we try and add a where filter - it stops working. 

 

i.e. 

 

#1 -With quotes for property name and double quotes for the value 

{% assign selected_variants = localization.market.metafields.custom.available_product_variants.value | where: 'featured_image.product_id', "product.id" %}

 

#2 - Without quotes for property name and double quotes for the value 

{% assign selected_variants = localization.market.metafields.custom.available_product_variants.value | where: featured_image.product_id, "product.id" %}

 

#3 - With the full variant name, quotes for property name and double quotes for the value 

{% assign selected_variants = localization.market.metafields.custom.available_product_variants.value | where: 'variant.featured_image.product_id', "product.id" %}

 

#4 -With the full variant name, without quotes for property name and double quotes for the value 

{% assign selected_variants = localization.market.metafields.custom.available_product_variants.value | where: variant.featured_image.product_id, "product.id" %}

 

What are we doing wrong? 

Reply 1 (1)

neilmojo
Shopify Partner
3 0 1

So we managed to get round this thanks to the suggestion at: https://stackoverflow.com/questions/26807967/overcome-limit-of-50-in-for-loop-in-shopify

 

Namely we increased the pagination like so: 

 

{% assign selected_variants = localization.market.metafields.custom.available_product_variants.value %}
{% paginate selected_variants by 1000 %}
{% for variant in selected_variants %}

<p>Market Variant ID: {{ variant.id }}</p>
<p>Market Variant Title: {{ variant.title }}</p>
<p>Market Variant Product ID: {{ variant.featured_image.product_id }}</p>
<p>Product ID: {{ product.id }}</p>
{% endfor %}

{% endpaginate %}

 

To be honest though - I don't want to be doing this, I only want to return the available_product_variants that I need after filtering it by the product of the page that it's on. It'd be less to deal with and just nicer on Shopify's servers too. 

 

If anyone has a suggestion for doing a where filter on the array that works - would love to hear what we need to do. 

 

Thanks

Neil