【Shopify】50件以上のコレクションを1ページで表示させる方法


ShopifyでECサイトを作る時に1ページで全て商品を表示させる時の実装方法について紹介します。

## はじめに
Shopifyテーマは"Debut"を使用しています。　
Shopifyは基本的に1ページあたりの商品上限数は50個としています。(以下公式サイト参考)
しかしサイトのデザイン上、1ページに全ての商品を表示し、スクロールして見れるようにしたい場合があります。

https://help.shopify.com/ja/manual/online-store/themes/themes-by-shopify/vintage-themes/customizing-vintage-themes/show-more-products#:~:text=Shopify%E3%81%AE1%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%82%E3%81%9F%E3%82%8A,%E5%95%86%E5%93%81%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

##現状
商品が50件以上登録されているコレクションを作成します。
今回は"Tシャツコレクション"という60件登録されているコレクションを作りました！
商品の名前もわかりやすく _Tシャツ01〜Tシャツ60_ としています。
 ![スクリーンショット 2022-01-22 18.58.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510944/bb6cbfa1-c408-3115-acda-84a5adac5520.png)

そしてテーマ"Debut"のカスタマイズ画面から商品の表示がわかりやすいように以下のように特集コレクション以外、**非表示**にします。
![スクリーンショット 2022-01-22 18.52.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510944/1f51d592-492b-f8b6-7a5d-71f1abdd72a7.png)

特集コレクションには先ほど作成した"Tシャツコレクション"を選択します。
そして、特集コレクションの設定で`行あたりの商品数`と`行`を"5"にします！
![スクリーンショット 2022-01-22 19.18.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510944/7b3ec0b4-2ded-fdba-9638-a59f86b1ae16.png)

そうすると`行あたりの商品数`と`行`が"5"なので合計25件の商品が表示されます。
![スクリーンショット 2022-01-22 19.22.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510944/a51b6700-af0b-fe08-660a-8b888acb4fd9.png)

##対処法
ここから`Liquid`のコードを修正してコレクションに登録している60件すべての商品を1ページに表示していきたいと思います！

今回は`Theme Kit`を使用して
いつも使っているエディタでコードを修正していきます！

Theme Kitについて詳しく知りたい方は以下を参照してください！

https://factory.d3-jp.com/shopify/themekit/

###修正箇所
修正するファイルはShopifyのテーマ"Debut"の以下のファイルです。
`sections/collection.liquid`

Githubディスクトップアプリを使用したことのある方は以下が見やすいと思います。
![スクリーンショット 2022-01-24 11.05.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510944/5941ca6d-8e4e-7781-94d5-04b026885605.png)

では改めてコードを見ていきましょう。

```liquidiquid:sections/collection.liquid
<ul class="grid grid--uniform grid--view-items">
  {% paginate collection.products by 1000 %} ←追記
    {% for product in collection.products %} ←管理画面で表示数を制御している記述を削除 
      <li class="grid__item grid__item--{{section.id}} {{ grid_item_width }}">
        {% include 'product-card-grid', max_height: max_height, product: product, show_vendor: section.settings.show_vendor %}
      </li>
    {% else %}

      {% for i in (1..product_limit) %}
        <li class="grid__item grid__item--{{section.id}} {{ grid_item_width }}">
          <div class="grid-view-item product-card">
            <a class="grid-view-item__link grid-view-item__image-container full-width-link" href="#">
              <span class="visually-hidden">{{ 'homepage.onboarding.product_title' | t }}</span>
            </a>
            <div class="grid-view-item__image-wrapper">
              {% capture current %}{% cycle 1, 2, 3, 4, 5, 6 %}{% endcapture %}
              {{ 'product-' | append: current | placeholder_svg_tag: 'placeholder-svg' }}
            </div>
            <div class="h4 grid-view-item__title" aria-hidden="true">{{ 'homepage.onboarding.product_title' | t }}</div>
            {% include 'product-price' %}
          </div>
        </li>
      {% endfor %}
    {% endfor %}
  {% endpaginate %} ←追記
  </ul>

```
まず上から2行目と下から2行目の以下のコードを追記します。

```
{% paginate collection.products by 1000 %} ←追記
~省略〜
{% endpaginate %} ←追記
```


2行目の`by 1000`の部分で1ページに最大表示させたい商品数を記述します。

そして３行目の`{% for product in collection.products %}`では最初に記述していた`limit: product_limit`を取り除くことで
Shopifyの管理画面で制御していた`行`の機能を使えなくします。

これで表示させる`行を1にしようが5にしようが制御が効かなくなります。
これでコレクションに登録した商品を最大1000件まで表示することができます。

では変更したコードを反映してサイトを見てみましょう！
以下のようにTシャツ01〜Tシャツ60までの商品が並んでますね！
並び順を変えたい場合は`商品管理`>`コレクション`>`任意のコレクション`の並び替えから自由に変えることができます！
![daytryral.myshopify.com_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510944/45dd9c83-45e7-fca5-8375-403300850d82.png)

##コードを触りたくないという方へ(結論：50件以上表示できますが並び替えが面倒です)
今回は`Liquid`のコードを編集して商品を50件以上表示させました！
コードを触りたくないという方は、
ひとつのコレクションに50件商品を登録し、その特集コレクションを複数並べると50件以上表示させることができます。

しかし、この方法だともしその商品の並び順が厳密に決まっている状態で
その50件の間にひとつ商品を追加されると商品をコレクション間でずらさないといけなくなります。

どういことかというと、
Aコレクションに50件、Bコレクションに50件、Cコレクションに20件商品を登録しています。
そこへAコレクションに1件商品を追加した場合、
Aコレクションが51件となります。
Shopifyの仕様上、ひとつのコレクションで表示できるのが50件までなので、
はみ出た1件の商品を後ろに並べたBコレクションにずらさないといけなくなります。

そうするとまたBコレクションが51件となり、はみ出た1件をCコレクションにずらさないといけなくなります。
これを管理画面で行うのが面倒なのでひとつのコレクションに好きなだけ商品を登録し、
表示させる方法を実装してみました。

##まとめ
今後、新たなShopifyテーマの登場でそういった商品の表示制限数などはなくなるかもしれませんが、
1ページで50件以上表示させたい方へ参考になれば嬉しいです！

###参考にしたサイト
https://www.slicedbread.agency/blogs/shopify/how-to-get-around-shopifys-50-product-limit-in-collections