バリエーションで指定したカラーのサムネールを表示させたい。

Topic summary

Shopifyの商品ページで、カラーごとのサムネールをアプリを使わずに表示したいという要望。Liquid(Shopifyのテンプレート言語)でpreselected variantの画像を使う例をスウォッチ内に入れたところ、全カラーが「現在選択中のカラー」の画像で表示される問題が発生。画像添付あり。

提案された解決策: スウォッチ生成のループ内で、value(カラー)に一致するvariantをproduct.variantsから検索し、該当variantのfeatured_image(そのバリアントの代表画像)のsrc/altを採用。例: variant.option1 == value で一致判定し、見つかったらbreakしてその画像を使用。

前提条件・注意: コードは未検証、カラーがoption1である構成を前提。同一カラーのサイズ違いなどの全バリアントで同じ画像がfeatured imageとして設定されていることが必要。

結果: 提案を適用後、期待通りカラーごとのサムネール表示に成功。現時点で課題や未解決点は提示されておらず、解決済み。

Summarized with AI on February 14. AI used: gpt-5.

バリエーションで指定したカラーのサムネールを表示させたいです。

アプリで「G:Variant Image + Color Swatch」というアプリがありますが、アプリを使用しないで実装したいです。

参考サイト
https://nga-appstore.myshopify.com/products/asymmetric-strap-dorsay-pumps

下記のURLを参考にして
https://shopify.github.io/liquid-code-examples/example/preselected-variant-image

{%- assign featured_image = product.selected_or_first_available_variant.featured_image | default: product.featured_image -%}
{{ featured_image.alt | escape }}

上記のコードを下記のコードに追加いたしました。

{% comment %} if color swatch {% endcomment %}
{% if color_swatch_options contains option_name and style == ‘swatches’ %}

{%- assign featured_image = product.selected_or_first_available_variant.featured_image | default: product.featured_image -%}
{{ featured_image.alt | escape }}

<input type=“radio” class=“product-form__swatch__input u-hidden-visually” id=“{{ id }}” name=“{{ option_name }}-c” value=“{{ value | escape }}” data-position=“{{ option.position }}” {{ checked }}/>


{{ value }}

{% comment %}

サムネールは表示されましたが、バリアントで指定したカラー全部の数だけ、現在選択されているカラーのサムネールなっています。

自分でいろいろ調べましたが、思った解決策が見つかりません。

どうか、ご教授いただけると嬉しいです。

何卒よろしくお願い申し上げます。

掲載されているコードの前後がどうなっているかによって変わってしまうのですが、

おそらく、下記のようなfor文の中に記載されたコードを掲載いただいたのではないかと思いますので、それを前提に回答いたします。

{% for option in product.options_with_value %}
  {% for value in option.values %}
     {{ 対象のコード  }}
  {% endfor %}
{% endfor %}

下記のようにされてはいかがでしょうか?

{% for option in product.options_with_value %}
  {% for value in option.values %}

    {% comment %}掲載コードの赤色の部分を下記に書き換えます ここから{% endcomment %}
    {% assign featured_img_src='' %}
    {% assign featured_img_alt = '' %}
    {% for variant in product.variants %}
      {% if variant.option1 == value %}
        {% assign featured_img_src=variant.featured_image.src | img_url: '1024x' %}
        {% assign featured_img_alt = variant.featured_image.alt | escape %}
        {% break %}
      {% endif %}
    {% endfor %}
    
    {% comment %}掲載コードの赤色の部分を下記に書き換えます ここまで{% endcomment %}

  {% endfor %}
{% endfor %}

注意点

  • 上記のコードは動作確認しておりません。
  • 上記のコードは、同じカラーのバリエーションには全て同じ画像が設定してあることを前提にしています。(BlackのSサイズ、BlackのMサイズ、BlackのLサイズ、これら全てに、同じ画像がfeatured imageとして設定してあることを前提にしています。)
  • カラーがoption1であることを前提にしています。

推測も前提も多いので、うまく動くか分かりませんが、

ご参考になれば幸いです。

(キュー田辺)

1 Like

うまく表示されました。

ありがとうございます。

本当に助かりました。