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の請求書の支払いが失敗したという通知を受け取って驚いたことはありますか。初めての支払いでエラーが発生したり、これまで何の問題もなく支払いできていたのに突然失敗し...
By Minami_ Sep 8, 20242023年2月、Shopifyはcheckout.liquidを廃止し、Checkout Extensibilityに移行することを発表いたしました。この新しいチェックアウト...
By JasonH Aug 15, 2024「味噌の可能性を、とき放つ」をコンセプトに、豊かな自然に恵まれた信州で味噌の製造販売を行う新田醸造。江戸末期に創業した老舗のみそ屋さんですが、2024年春、顧客層や販売範囲の...
By Minami_ Jul 30, 2024