# 【if文】特定のコレクションに属するすべての商品にのみ、特定のテキストを表示させたい

**URL:** <https://community.shopify.com/t/if/137913>\
**Category:** 技術的なQ＆A\
**Created:** [July 26, 2022, 4:21am UTC](https://community.shopify.com/t/if/137913 "2022-07-26T04:21:43Z")\
**Posts on this page:** 3\
**Page:** 1

## AI-generated summary

目的: コレクションAに属する商品の商品ページにだけ配送料に関する特別テキストを表示したい。初期実装はproduct-template.liquidでcollection.titleを参照しており、表示されなかった。

原因: 商品ページではcollectionオブジェクトは取得できず（空）、collection.titleは使えない。所属コレクションを取得するにはproduct.collections（配列）を参照する必要がある。

解決策:
- 単一コレクション運用なら、product.collections[0].titleと対象名の一致で判定。
- 複数コレクション運用なら、product.collectionsをfor文で走査し、collection.titleが対象名と一致したときだけテキストを出力。

補足: コレクションAが手動/自動かは本件の判定方法に影響しない。参考としてShopify公式ドキュメント（Liquidのproductオブジェクト）へのリンクが提示された。

結果: 複数コレクション所属のため、for文を用いる方法を採用。意図どおり表示でき、問題は解決済み。

<div class="post-metadata">

**Author:** ![design3](https://avatars.discourse-cdn.com/v4/letter/d/9d8465/32.png) [@design3](https://community.shopify.com/u/design3)\
**Post date:** [July 26, 2022, 4:21am UTC](https://community.shopify.com/t/if/137913/1 "2022-07-26T04:21:43Z")

</div>

様々なコレクションがある中で、コレクション【A】に分類されている商品は配送料が高く設定されています。

そのため、コレクション【A】に分類されている商品のみ、商品ページに配送料に関するテキストを特別に表示させたいと考えています。

(A以外のコレクションに属する商品ページには、該当のテキストは非表示)

上記の要望を叶えるためにはどのような記述をすべきなのでしょうか。

下記のコードを「product-template.liquid」に記載しましたが、if文の記述がおかしい様で表示されません…

```auto
 {% if collection.title == 'コレクション名' %}
 <p>こちらに特別に表示させたいテキストがはいります</p> 
{% endif %}

```

商品名で指定しても良いのですが、コレクション【A】に属する商品が多いため

コレクション【A】に属するすべての商品ページで…という設定にしたいです。

※判断材料になるかは分からないのですが、コレクション【A】は自動ではなく手動で設定しています

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

---

<div class="post-metadata">

**Author:** ![st\_mh](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@st\_mh](https://community.shopify.com/u/st_mh)\
**Post date:** [July 26, 2022, 6:05am UTC](https://community.shopify.com/t/if/137913/2 "2022-07-26T06:05:22Z")

</div>

試しに以下を追記してみると分かると思います。

collectionページではタイトルが出力されますが、商品ページでは何も取得できず空白になります。

```markup
{{ collection.title }}

```

products以下の商品ページで、所属コレクションを取得するならば、以下の記述となります。

```markup
{% for collection in product.collections %}
  {{ collection.title }}
{% endfor %}
// 所属するコレクション名が全て出力される

```

（参考）[https://shopify.dev/api/liquid/objects#product](https://shopify.dev/api/liquid/objects#product)

product.collectionsで取得できる情報は配列です。

自分は以下のように格納されているイメージです。

```javascript
{
collection0:{[
  title: "タイトル0",
  url: "URL0"
]},
collection1:{[
  title: "タイトル1",
  url: "URL1"
]},
collection2:{[
  title: "タイトル2",
  url: "URL2"
]},
.....
}

```

この配列情報から、特定のコレクション名が含まれるかを識別します。

①「1商品につき所属コレクションは1つだけ」という運用をされているならば、記述はシンプルです。

```markup
{% if product.collections[0].title == 'コレクション名' %}
 

こちらに特別に表示させたいテキストがはいります

 
{% endif %}

```

1つ目のコレクションから、タイトルを取得し、文字列一致を識別するだけですね。

②ただ、複数コレクションに属すならば、やはりfor文で処理を行うのが良いでしょう。（やり方はいくらかありますが）

```markup
{% for collection in product.collections %}
  {% if collection.title == 'コレクション名' %}
    

こちらに特別に表示させたいテキストがはいります

 
  {% endif %}
{% endfor %}

```

titleとコレクション名が一致するかを繰り返し照合し、合致する場合のみ文章を出力させる処理です。

---

<div class="post-metadata">

**Author:** ![design3](https://avatars.discourse-cdn.com/v4/letter/d/9d8465/32.png) [@design3](https://community.shopify.com/u/design3)\
**Post date:** [July 26, 2022, 10:33am UTC](https://community.shopify.com/t/if/137913/3 "2022-07-26T10:33:44Z")

</div>

ご回答ありがとうございました！

コレクションには、複数アイテムありましたので２つ目の方法で実践しました。

とても助かりました、ありがとうございました。
