Liquid、JavaScriptなどに関する質問
様々なコレクションがある中で、コレクション【A】に分類されている商品は配送料が高く設定されています。
そのため、コレクション【A】に分類されている商品のみ、商品ページに配送料に関するテキストを特別に表示させたいと考えています。
(A以外のコレクションに属する商品ページには、該当のテキストは非表示)
上記の要望を叶えるためにはどのような記述をすべきなのでしょうか。
下記のコードを「product-template.liquid」に記載しましたが、if文の記述がおかしい様で表示されません…
{% if collection.title == 'コレクション名' %}
<p>こちらに特別に表示させたいテキストがはいります</p>
{% endif %}
商品名で指定しても良いのですが、コレクション【A】に属する商品が多いため
コレクション【A】に属するすべての商品ページで…という設定にしたいです。
※判断材料になるかは分からないのですが、コレクション【A】は自動ではなく手動で設定しています
よろしくお願いいたします。
解決済! ベストソリューションを見る。
成功
試しに以下を追記してみると分かると思います。
collectionページではタイトルが出力されますが、商品ページでは何も取得できず空白になります。
{{ collection.title }}
products以下の商品ページで、所属コレクションを取得するならば、以下の記述となります。
{% for collection in product.collections %}
{{ collection.title }}
{% endfor %}
// 所属するコレクション名が全て出力される
(参考)https://shopify.dev/api/liquid/objects#product
product.collectionsで取得できる情報は配列です。
自分は以下のように格納されているイメージです。
{
collection0:{[
title: "タイトル0",
url: "URL0"
]},
collection1:{[
title: "タイトル1",
url: "URL1"
]},
collection2:{[
title: "タイトル2",
url: "URL2"
]},
.....
}
この配列情報から、特定のコレクション名が含まれるかを識別します。
①「1商品につき所属コレクションは1つだけ」という運用をされているならば、記述はシンプルです。
{% if product.collections[0].title == 'コレクション名' %}
<p>こちらに特別に表示させたいテキストがはいります</p>
{% endif %}
1つ目のコレクションから、タイトルを取得し、文字列一致を識別するだけですね。
②ただ、複数コレクションに属すならば、やはりfor文で処理を行うのが良いでしょう。(やり方はいくらかありますが)
{% for collection in product.collections %}
{% if collection.title == 'コレクション名' %}
<p>こちらに特別に表示させたいテキストがはいります</p>
{% endif %}
{% endfor %}
titleとコレクション名が一致するかを繰り返し照合し、合致する場合のみ文章を出力させる処理です。
成功
試しに以下を追記してみると分かると思います。
collectionページではタイトルが出力されますが、商品ページでは何も取得できず空白になります。
{{ collection.title }}
products以下の商品ページで、所属コレクションを取得するならば、以下の記述となります。
{% for collection in product.collections %}
{{ collection.title }}
{% endfor %}
// 所属するコレクション名が全て出力される
(参考)https://shopify.dev/api/liquid/objects#product
product.collectionsで取得できる情報は配列です。
自分は以下のように格納されているイメージです。
{
collection0:{[
title: "タイトル0",
url: "URL0"
]},
collection1:{[
title: "タイトル1",
url: "URL1"
]},
collection2:{[
title: "タイトル2",
url: "URL2"
]},
.....
}
この配列情報から、特定のコレクション名が含まれるかを識別します。
①「1商品につき所属コレクションは1つだけ」という運用をされているならば、記述はシンプルです。
{% if product.collections[0].title == 'コレクション名' %}
<p>こちらに特別に表示させたいテキストがはいります</p>
{% endif %}
1つ目のコレクションから、タイトルを取得し、文字列一致を識別するだけですね。
②ただ、複数コレクションに属すならば、やはりfor文で処理を行うのが良いでしょう。(やり方はいくらかありますが)
{% for collection in product.collections %}
{% if collection.title == 'コレクション名' %}
<p>こちらに特別に表示させたいテキストがはいります</p>
{% endif %}
{% endfor %}
titleとコレクション名が一致するかを繰り返し照合し、合致する場合のみ文章を出力させる処理です。
ご回答ありがとうございました!
コレクションには、複数アイテムありましたので2つ目の方法で実践しました。
とても助かりました、ありがとうございました。
Shopifyペイメント決済サービスを利用していて、ストアの管理画面の通知セクションに突然「Shopifyペイメントの使用を継続するために必要な情報」というバナーメッセージが表示さ...
By Mirai Dec 3, 2023すべてのShopifyアカウントはデフォルトではmyshopify.comのURLと関連付けられており、これはアカウント設定時に使用したビジネス名に基づいて作成されます。しかし、オ...
By Nina_13 Nov 26, 2023このトピックは英語版コミュニティの投稿:Shopify Web Pixel Manager Sandbox FAQの日本翻訳です。
By Mirai Nov 19, 2023