コレクションページに条件を満たした商品のみバリエーション毎に商品を出力したい。

Topic summary

Dawnテンプレートを使用したコレクションページで、特定のコレクションに属し、かつ複数のバリエーションを持つ商品を、バリエーション毎に個別表示したいという技術的な質問です。

試したこと:

  • main-collection-product-grid.liquidファイルを修正
  • product.collections contains 'tshirt'という条件で判定を試みたが、出力されず

提案された解決策:
product.collectionsはcollectionオブジェクトの配列であるため、単純な文字列比較では動作しません。正しい判定方法として以下が提案されました:

  • product.collectionsをループして各collectionのhandleプロパティと比較
  • isBelongToCollectionという変数を使って所属判定を行う
  • この変数とproduct.variants.size > 1の両方の条件を満たす場合にバリエーションをループ表示

コード例が提示されましたが、十分な検証はされていないとの注記付きです。

Summarized with AI on November 22. AI used: claude-sonnet-4-5-20250929.

「Dawn」のテンプレートを使用しております。

コレクションページに

「特定のコレクションに属しており、且つバリエーションがある」

という条件を満たした商品のみバリエーション毎に出力したいです。

例:「Tシャツ」というコレクションに属しており、S,M,L,XLと複数のバリエーションがある商品

試したこと

「main-collection-product-grid.liquid」の下記部分を修正したのですが、

出力されず困っております。。。

<ul id="product-grid" data-id="{{ section.id }}" class="grid product-grid grid--{{ section.settings.columns_mobile }}-col-tablet-down grid--{{ section.settings.columns_desktop }}-col-desktop">
  {%- for product in collection.products -%}
    {%- if product.variants.size > 1 and product.collections contains 'tshirt' -%}
      {%- for variant in product.variants -%}
        <li class="grid__item">
          {% render 'card-product',
            card_product: product,
            media_aspect_ratio: section.settings.image_ratio,
            show_secondary_image: section.settings.show_secondary_image,
            show_vendor: section.settings.show_vendor,
            show_rating: section.settings.show_rating,
            lazy_load: false,
            show_quick_add: section.settings.enable_quick_add,
            section_id: section.id,
            current_variant: variant
          %}
        </li>
      {%- endfor -%}
    {%- else -%}
      <li class="grid__item">
        {% render 'card-product',
          card_product: product,
          media_aspect_ratio: section.settings.image_ratio,
          show_secondary_image: section.settings.show_secondary_image,
          show_vendor: section.settings.show_vendor,
          show_rating: section.settings.show_rating,
          lazy_load: false,
          show_quick_add: section.settings.enable_quick_add,
          section_id: section.id
        %}
      </li>
    {%- endif -%}
  {%- endfor -%}
</ul>

恐れ入りますがご教示お願いいたします。

十分に検証しておりませんので、

うまく動作しなければ申し訳ございません。

product.collectionsは、collectionオブジェクトの配列ですので、

https://shopify.dev/docs/api/liquid/objects/collection

質問者様が設定されている「tshart」がhandleでしたら、

「tshart」に所属するかどうかの判定は下記のようになるのではないかと思います。

{% for collection in product.collections %}
  {% if collection.handle == 'tshart' %}
     
  {% endif %}
{% endfor %}

したがいまして、コードは下記のようになるのではないかと思います。


  {%- for product in collection.products -%}
      {%- assign isBelongToCollection == false -%}
      {%- for collection in product.collections -%}
      {%- if collection.handle == 'tshart' -%}
        {%- assign isBelongToCollection == true -%}
      {%- endif -%}
     {%- endfor -%}

    {%- if product.variants.size > 1 and isBelongToCollection -%}
      {%- for variant in product.variants -%}
        - {% render 'card-product',
              card_product: product,
              media_aspect_ratio: section.settings.image_ratio,
              show_secondary_image: section.settings.show_secondary_image,
              show_vendor: section.settings.show_vendor,
              show_rating: section.settings.show_rating,
              lazy_load: false,
              show_quick_add: section.settings.enable_quick_add,
              section_id: section.id,
              current_variant: variant
            %}
        

      {%- endfor -%}
    {%- else -%}
      - {% render 'card-product',
            card_product: product,
            media_aspect_ratio: section.settings.image_ratio,
            show_secondary_image: section.settings.show_secondary_image,
            show_vendor: section.settings.show_vendor,
            show_rating: section.settings.show_rating,
            lazy_load: false,
            show_quick_add: section.settings.enable_quick_add,
            section_id: section.id
          %}
      
    {%- endif -%}
  {%- endfor -%}

ご参考まで。

(キュー田辺)