How to reference metaobject per variant without variant metafield?

Topic summary

A user is trying to access metaobject data (color name and hex code) for product variants in Liquid without creating an intermediate variant metafield. They believe the data should be directly accessible through the metaobject itself.

Proposed Solution:

  • Access the variant’s color option value using current_variant.options[index]
  • Query the metaobjects collection using the where filter to match the option value
  • Extract color properties (name, hex code) directly from the matched metaobject

Implementation approach:

{% assign variant_color = current_variant.options[0] %}
{% assign color_metaobject = metafields.color | where: "value", variant_color | first %}

Key considerations:

  • Adjust the option index if color isn’t the first variant option
  • Add error handling for variants without matching metaobjects
  • This eliminates the need for redundant variant metafields

The discussion appears resolved with a working code example provided.

Summarized with AI on November 2. AI used: claude-sonnet-4-5-20250929.

I have created a metaobject for “color” on my store. Each variant is connected to the correct metaobject entry for each variant color. For some reason, I can’t figure out how to reference the variant color and hex code in liquid without having to first create a variant metafield and connect the color metaobject to the variant metafield. But it just seems to be an unnecessary extra step to create this metafield when the data should already be available with the metaobject.

Anyone who knows about this?

Best regards

Jesper

1 Like

Hey @Jesper20 ,

Here’s how you can reference the color metaobject directly within your Liquid code:

1. Access the Variant’s Option Value:

  • In your product-template.liquid file, you can access the variant’s option value using the current_variant.options[0] variable. This assumes that “Color” is the first option selected for your product.

2. Use the Option Value to Query Metaobjects:

  • Use the metafields object and the where filter to query the metaobjects collection and find the matching color metaobject.

Here’s an example of how you can implement this in Liquid:

{% assign variant_color = current_variant.options[0] %} 

{% assign color_metaobject = metafields.color | where: "value", variant_color | first %}

{% if color_metaobject %}
  <p>Color: {{ color_metaobject.value }}</p> 
  <p>Hex Code: {{ color_metaobject.hex_code }}</p> 
{% endif %}

Explanation:

  • variant_color: Stores the selected color option for the current variant.
  • metafields.color | where: “value”, variant_color: This filters the metafields.color collection to find the metaobject where the “value” field matches the variant_color.
  • first: This selects the first matching metaobject from the filtered collection.

Important Notes:

  • Adjust the code if “Color” is not the first option selected for your product. You can use current_variant.options[index] to access the correct option value, where index is the position of the “Color” option in the variant’s option array.
  • Error Handling: Consider adding error handling to gracefully handle cases where the variant color doesn’t have a corresponding metaobject.

This approach allows you to directly reference the color metaobject based on the variant’s option value without the need for an additional variant metafield. Pro Tip: Tools like SEOPro can help you manage and optimize your product information, including Metafields, to improve your store’s overall search engine visibility.

Let me know if you have any further questions or encounter any issues.

I hope this helps!

Lily!