商品画像の下にバリエーションの文字を表示させる

AI-generated summary

目的:バリエーション選択時に、切り替わった商品画像の下へ対応するバリエーション名を自動表示したい(これまでは画像に直接文字入れ)。テーマはPristage、ShopifyのLiquid(テンプレート言語)で実装予定。

試み:product-template内の画像下に表示位置を特定し、snippets/variant-options.liquidをrenderしてバリエーション名を表示する方針。ただし、Liquidのどのプロパティを使えば名称を取得できるか不明。

提案・見解:

  • 有料テーマのため情報が限られる可能性。テーマドキュメントの確認、開発者への問い合わせ、エキスパート依頼を推奨。
  • 自力で行う場合は、バリエーション画像を表示しているコードの入手元・関連付け方法を特定し、その取得元からvariant.titleなどを参照。

提示コード(要点):

  • 画像のaltテキスト(代替テキスト)とバリエーション名が一致している前提で、以下のLiquidを用いて画像下に名称を表示可能:
    for variant in product.variants → if variant.title == media.alt →

    {{ variant.title }}

現状:投稿者はまずテーマ開発者に相談する方針。コード案は示されたものの、実装・動作の報告はなく、解決は未確認。

商品管理画面で「バリエーション」を複数登録し、「バリエーション画像」を指定しています。

ユーザーがバリエーションのボタンを選ぶと、指定した画像にイメージがスライドしますが、

その際に、バリエーション名を画像の下に表示させたいと考えています。

(これまではPhotoshopで画像に直接文字入れしていましたが、作業を楽にするためにコードで表示させたいです)

https://shopify.dev/api/liquid/objects/variant#variant-title

上記のリンクを参考にしながら進めており、

  1. section > product-template の中の、イメージボックスの下に文字を表示させる箇所を特定
  2. その箇所に {%- render -%}で「variant.options」を呼び出しを想定
  3. 呼び出し元として、snippetsの中に「variant-options.liquid 」を新規作成

という手順で実装したいのですが、上記リンクの中のどの項目をsnippetsの中に入れれば、

バリエーション名を拾ってくれるのかがわからず困っております。

テーマは「Pristage」を使用しております。

もしわかる方がいらっしゃれば、snippetsの中に入るコードを示していただけますと幸いです。

よろしくお願いいたします。

回答がつかないようなので、具体的な事柄は書けませんが一応記載したいと思います。

対象が有料テーマのため無料テーマに比べて回答できる方は減りますので、現状を鑑みますと以下のいずれかの方法を検討する必要があると思います。

  • テーマのドキュメントから情報を探す
  • テーマ開発者にサポート可能か相談する
  • エキスパートやパートナーに依頼する

ご自身で対応される場合は、ドキュメントを読むことも重要ですが該当箇所のコードを読んで理解できるだけの知識が必要になります。
バリエーションの画像を表示しているコードを見つけ、その画像がどのようにして取得されているか(あるいはバリエーションと画像をどのように関連づけているか)を特定すれば、その取得元からtitleが取れるかもしれません。

以上ですが、個人的にはテーマ開発者かエキスパートやパートナーを頼ることをお勧めします。

Jizo_Inagaki様

お返事いただきありがとうございます。

そうですね…ご回答いただいた通り、

>バリエーションの画像を表示しているコードを見つけ、その画像がどのようにして取得されているか(あるいはバリエーションと画像をどのように関連づけているか)を特定する

と結構ハードルの高いカスタムになりそうなので、一度テーマ開発の方に問い合わせてみて、難しそうであれば断念しようと思います。

参考になりました。ご回答、ありがとうございました。

{% for variant in product.variants %}
{% if variant.title == media.alt %}

{{ variant.title }}

{% endif %}
{% endfor %}

これでいかがですか?
画像にバリエーション名と同じ代替テキストがセットされている必要があります。