メタフィールドで選択したコレクションのリンクを商品ページに追加したい

初心者です。

メタフィールドは各カテゴリごとのカスタムデータ定義、メタオブジェクトはショップ全体のカスタムデータ定義と理解しています。

Liquidもかじった程度です。

商品ページにコレクションで作成したページのテキストとリンクを記載したいと考えています。

メタフィールドにて下記の通りコレクションのフィールドを定義しました。

商品ページで該当のコレクションを選び、

テーマの設定で「カスタムLiquid」ブロックに下記コードを入力しましたが、プレビューでは「CollectionList Drop」と表示され、コレクション名が表示されません。

{% if product.metafields.custom.brands.value != blank %}
<div>
{{product.metafields.custom.brands.value}}
</div>
{% endif %}

staff_m_1-1733817533827.png

コレクション名とコレクションのリンクを記載するにはどうしたら良いのでしょうか。

以下でどうでしょう?

{% if product.metafields.custom.brands %}
  {% assign collection_handle = product.metafields.custom.brands %}
  {% assign brands = collections[collection_handle] %}
  
  {% if brands %}
    {{ brands.title }}
  {% else %}
    

関連するコレクションは見つかりませんでした。

  {% endif %}
{% else %}
  

関連するコレクションは設定されていません。

{% endif %}
1 Like

早急なご回答ありがとうございます!

ご教示いただいた内容で修正したのですが、コレクションのリンクは表示されませんでした。

if分の条件には合致しているようで、試しに下記のように

aaa

を追加したらプレビュー画面に「aaa」は表示されました。

{% if product.metafields.custom.brands %}
  {% assign collection_handle = product.metafields.custom.brands %}
  {% assign brands = collections[collection_handle] %}
  
  {% if brands %}
    

aaa

    {{ brands.title }}
  {% else %}
    

関連するコレクションは見つかりませんでした。

  {% endif %}
{% else %}
  

関連するコレクションは設定されていません。

{% endif %}

{{collection_handle}}には[“gid://shopify/Collection/コレクションID”]が入っているようなのですが、こちらがbrandsに代入する際にうまくいっていないのでしょうか?

1 Like

ご返信ありがとうございます。

であれば、ひとつひとつ確認しながら進めて、最終的に別の形式のハンドルをcollectionsに渡して値を引っ張ってくるといいかもしれません。

まず以下のコードで、ストアのすべてのコレクションのハンドルとタイトルリンクを表示することができるはずです(ここがまずうまくいかなかったらご指摘ください)

{% for collection in collections %}
  - {{ collection.handle }}:{{- collection.title | link_to: collection.url }}

{% endfor %}

すると、表示したいコレクションのハンドルが何かがわかるはずなので、

{% assign brands = collections['ハンドル名'] %}

と、直接ハンドル名の文字列を渡してあげてください。うまくいけば、brandsに正しいコレクションが設定されると思います。

参考までに、collectionsについての公式ドキュメントはこちらです。

https://shopify.dev/docs/api/liquid/objects/collections#collections-access-a-specific-collection

1 Like

ご返信ありがとうございます!

回答いただいた確認項目はどちらも問題なくできました。

メタフィールドで取得する情報がgidになってしまうようなので、下記を参考にidからhandleを取得する方法にしてやりたいことが実現できました!

How to get product Information by Product ID ?
https://community.shopify.com/c/shopify-apps/how-to-get-product-information-by-product-id/td-p/1604231

ご参考までにコード貼っておきます。

{% if product.metafields.custom.brands %}
  {% assign split_id = product.metafields.custom.brands | split:"/" %}
  {% assign the_id = split_id |last %}
  {% assign collection_id = the_id | times:1 %}
  {% assign collection_handle = collections | where: 'id', collection_id | first %}
  {% assign brands = collections[collection_handle.handle] %}
  
  {% if brands %}
    {{ brands.title }}
  {% else %}
    

関連するコレクションは見つかりませんでした。

  {% endif %}
{% else %}
  

関連するコレクションは設定されていません。

{% endif %}

この度は早急なご回答大変助かりました。

1 Like

解決してよかったです! :tada:

2 Likes