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つ目の方法で実践しました。
とても助かりました、ありがとうございました。
サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 6, 20242023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 29, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024