コレクションによってcart attributeの内容を変えて表示したい

Topic summary

カート内の商品が属するコレクションに応じて、cart-template.liquidの表示を切り替えたいという要件。エラーになる既存コードに代わり、Liquidで条件分岐する方法が議論された。

提案された実装: cart.itemsを走査し、各line itemのproduct.collectionsからタイトルを収集・配列化し、containsで「A店」「B店」「C店」に応じて表示を切り替える。

技術補足: Liquidのオブジェクト参照(cart→line_item→product→collections)を利用。提示コードとShopifyドキュメントへのリンクが示され、コードスニペットが理解の中心。

注意点: 異なるコレクションの商品が同時にカートに入る場合、最初の条件のみが適用されるため、要件次第で設計の見直しや、指定コレクションの同時追加を禁止するアプリの導入が選択肢。

進展・結果: 提供コードでコレクションタイトル取得と表示切替に成功。今後、コレクション混在を防ぐアプリの導入を検討(過去スレッドのリンクを確認)。

状態: 表示切替の技術的問題は解決。混在防止の施策は未検証で継続。

Summarized with AI on March 4. AI used: gpt-5.

選択するコレクションによってcart attributeの表示を切り替えることはできませんでしょうか。

具体的には、cart-template.liquidに下記のようなコードを作りたいです。

{% if collection.title  == 'A店' %}
            
  

  

   3時~4時

   4時~5時

   5時〜6時

{% elsif collection.title  ==  'B店' %}
                  
  

  

   3時~4時

   4時~5時

   5時〜6時

      
  {% elsif collection.title  ==  'C店' %}
                  
  

  

   3時~4時

   4時~5時

   5時〜6時

      
            
  {% endif %}

上記コードではエラーになってしまいます。

どなたかアドバイスいただけませんでしょうか。

カート画面のことかと思いますが、「選択するコレクション」というのは「カート内の商品が属しているコレクション」という意味でしょうか?

その場合、一応以下でコレクションのtitleは取れると思います。

{% assign collection_titles = '' %}
{% for item in cart.items %}
	{% for collection in item.product.collections %}
		{% assign collection_titles =  collection_titles | append: "," | append: collection.title %}
	{% endfor %}
{% endfor %}
{% assign collection_titles_array = collection_titles | remove_first: "," | split: ","%}

{% if collection_titles_array contains 'A店' %}
	A店が含まれている場合
{% elsif collection_titles_array contains 'B店' %}
 	B店が含まれている場合
{% elsif collection_titles_array contains 'C店' %}
	C店が含まれている場合
{% endif %}

cartオブジェクトからline iltemsを取り出し、さらにそのline itemsからproductを取り出して、product オブジェクトのcollectionsを取り出す、という流れです。
文字列をつなげただけでも事足りる条件かもしれませんが、一応配列として扱える形にして、その配列内に目的の文字列があれば分岐します。

参考:

https://shopify.dev/api/liquid/objects/cart#cart-items

https://shopify.dev/api/liquid/objects/line_item#line_item-product

https://shopify.dev/api/liquid/objects/product#product-collections

ただ、「コレクションA店に属する商品」「コレクションB店に属する商品」「コレクションC店に属する商品」の3種が同時にカートに入る状況も想定されますので、その場合この分岐では最初にあるA店の内容しか表示されません。

この状態が想定されている動作なら問題ありませんが、違う場合はご希望の状態を達成できるように仕組みから作り直す必要があるかもしれません。

または、アプリなどを使って指定コレクションに属する商品を同時にカートに入れられなくする方法も考えられますが、この方法に関しましてはフォーラムに既にスレッドがありますので検索いただければと思います。

以上ですが、もしもサンプルが動かない場合は申し訳ありません。

「選択するコレクション」というのは「カート内の商品が属しているコレクション」という意味で合っております!

教えていただいたコードで、コレクションのタイトルを取得し、取得したタイトルによってカート内の表示を切り替えることができました。

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

まだ試すことができていませんが、異なるコレクションがカート内に入らないようにするアプリについて過去Jizo_Inagaki 様が回答されていたスレッドを見つけました。異なるコレクションはカート入らないようにしたいので、こちら試してみたいと思います。ありがとうございます!

https://community.shopify.com/post/1224599