# Collection 内でのランキング表示をしたいのですが、sortフィルターがうまく動作しません。売上順に並べたものを常に一番上に表示したいと考えています。

**URL:** <https://community.shopify.com/t/collection-sort/7059>\
**Category:** 技術的なQ＆A\
**Created:** [November 11, 2019, 5:33am UTC](https://community.shopify.com/t/collection-sort/7059 "2019-11-11T05:33:48Z")\
**Posts on this page:** 6\
**Page:** 1

## AI-generated summary

Collectionページ内で売れ筋商品を上部にランキング表示したいが、Liquidの`sort: 'best-selling'`が機能しない、という相談です。結論として、`sort`フィルターは任意の並び順名には使えず、商品オブジェクトの特定プロパティ向けで、売上順の算出をLiquid単体で行うのは難しい、という見解が示されました。

途中では、
- Liquidチートシートの参照先
- タグ付けや自動コレクション、外部JSON、アプリ利用
- コレクション既定の並び順`best-selling`の活用
といった代替案が挙がっています。

最終的には自己解決しています。`collections`オブジェクト（全コレクション一覧）をループし、現在の`collection.handle`と一致するコレクションを取得、その`products`から`limit: 3`で表示する方法です。これにより、URLクエリによるフィルタや並び替えの影響を受けない固定表示が可能になりました。

ただしベストセラー順にするには、各コレクションのデフォルトソートを`best-selling`に統一する必要があります。議論は解決済みです。

<div class="post-metadata">

**Author:** ![WEBUILD](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/webuild/32/271922_2.png) [@WEBUILD](https://community.shopify.com/u/WEBUILD)\
**Post date:** [November 11, 2019, 5:33am UTC](https://community.shopify.com/t/collection-sort/7059/1 "2019-11-11T05:33:48Z")

</div>

表題の通り、コレクションページ内で売れ筋商品を一覧よりも上に表示したいと考えています。

 ![image.png](https://canada1.discourse-cdn.com/shopifyforum/original/3X/f/d/fdafea642a9e3243e0a8e6f5d6f6b795f5455f4a.png)

イメージは上画像のような感じです。  
上位3位まで表示されるようにしたいのです。

現状のコードは以下のとおりです。

```auto
{% assign ranking = collection.products | sort: 'best-selling' %}
{% for product in ranking %}
    {% if forloop.index == 4 %}
        {% break %}
    {% else %}
         */ここにランキングカードの出力文が書かれています*/
    {% endif %}    
{% endfor %}

```

sort: フィルターにどのようなものが使えるのか検索しましたが、探し当てることができませんでした。

Liquidのサンプルでは ‘price’ や ‘title’ が与えられていましたが・・・

またsort\_by のオプションを変更すると出力されるものも一緒に変更されます(しかしながらそのソートとも異なる順番で表示されます。)やはり sort フィルターが効いていないと考えるべきなのでしょうか？  
それとも現在売上がまだ無いのでだめなのでしょうか？

試しに3点ほどテスト注文してみましたが、順位に変動は見られませんでした。

解決方法、あるいはsort filter で使用可能なチートシート的なものがあればご教示願いたいです。

---

<div class="post-metadata">

**Author:** ![junichiokamura](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/junichiokamura/32/299737_2.png) [@junichiokamura](https://community.shopify.com/u/junichiokamura)\
**Post date:** [November 12, 2019, 8:58am UTC](https://community.shopify.com/t/collection-sort/7059/2 "2019-11-12T08:58:10Z")

</div>

liquidのチートシートは以下になります。

[https://www.shopify.com/partners/shopify-cheat-sheet](https://www.shopify.com/partners/shopify-cheat-sheet)

sortは基本的にそのobjectに存在する項目のみでかつ、全ての項目がsort可能ではないかと思います。（どの項目でsort可能かの情報は確かに明示されていません）

また、売れ筋で並べるということは、商品の価格ではなくて、その商品の累計売り上げをチェックしなくてはならないので、 liquid単体だと難しいかと思います。

簡単な方法としては、売れ筋をあらかじめタグ設定しておき、タグでsortしてみるとかがあります。

もしくはアプリなどでそういったものがあるかもしれません。（レコメンドの派生機能など）

あとは、自動コレクションを使って一定の条件に一致するコレクションを生成する方法もあります（在庫が一定以下＝売れ筋と見立てるなど）

---

<div class="post-metadata">

**Author:** ![WEBUILD](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/webuild/32/271922_2.png) [@WEBUILD](https://community.shopify.com/u/WEBUILD)\
**Post date:** [November 12, 2019, 9:19am UTC](https://community.shopify.com/t/collection-sort/7059/3 "2019-11-12T09:19:38Z")

</div>

ご回答ありがとうございます。

チートシート、ブックマークさせていただきました。

やはりliquidだけでは厳しいのでしょうか。。。  
商品点数がおおく、またそれに付随してコレクション数もかなりの数になりそうですので  
自動でliquid側から出力されたらなぁ～って希望的観測からでした。。。  
外部サーバーのJSONは読み込みができたので、JSONをそれ用に毎日生成して読み込むようにでもしますかね。  
コレクションとプロダクトの対照表みたいなのを作るの非常に面倒そうですが・・・

ご存じでしたらついでにお伺いしたいのですが  
コレクションページにほかのコレクションを表示したりは可能なのでしょうか。  
defalt\_sort\_byのなかにbest-sellingがあるので  
デフォルトを全部売り上げ順に設定して、コレクションページでself\_handleみたいなことができたら

最高なのですが。

なかなか難しいですね。。。

---

<div class="post-metadata">

**Author:** ![junichiokamura](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/junichiokamura/32/299737_2.png) [@junichiokamura](https://community.shopify.com/u/junichiokamura)\
**Post date:** [November 12, 2019, 9:26am UTC](https://community.shopify.com/t/collection-sort/7059/4 "2019-11-12T09:26:39Z")

</div>

確かにコレクションの並び順にベストセラーがあるので、コレクション単位ならこれでカバーできると思います。

コレクションのなかにコレクションを埋める方法ですが、Buy Button Appをインストールすると、コレクション単位のBuy Buttonのコードを生成できます。これを別のこれククションのテーマに貼り付けると、コレクションの中に別のコレクションが埋め込まれるかもしれません。（検証はしていないです）

---

<div class="post-metadata">

**Author:** ![WEBUILD](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/webuild/32/271922_2.png) [@WEBUILD](https://community.shopify.com/u/WEBUILD)\
**Post date:** [November 13, 2019, 1:56am UTC](https://community.shopify.com/t/collection-sort/7059/5 "2019-11-13T01:56:12Z")

</div>

ご返答ありがとうございます。  
ご教示いただいたappは製品のリスト自体は自身で作成する必要があったため、やはり数百にも及ぶコレクションに設置するのは

骨が折れますね。。。ありがとうございました。

自己解決したので解決方法をこちらに提示いたします。

pageにcollectionのリストを表示する公式の方法からヒントを得て実装しました。

サンプルコードです。

```auto
{% assign all_collections = collections %}
{% for col_obj in all_collections %}
	{% if col_obj.handle == collection.handle %}
		{% for product in col_obj.products limit: 3 %}
			<!-- ここに製品のカードを表示 3つだけ-->
		{% endfor %}
	{% endif %}
{% endfor %}

```

非常にシンプルでした  
collections オブジェクトは 通常のcollectionオブジェクトと異なり、全collectionオブジェクトを返すオブジェクトのようです。  
ですので、collections オブジェクトをfor ループで回して 現在のcolllection オブジェクトのハンドルと比較し  
一致したらそのオブジェクトからproductsオブジェクトを取り出すことで、

現在のcollectionの状況に関係しない(タグでのフィルタリングやソートの変更(URLクエリ)に左右されない)

リストを表示することができました。

_※ただしベストセラー表示をするにはコレクションのデフォルトソートをベストセラーに統一する必要があります。_  
応用すれば、コレクションページやプロダクトページ問わず、ランキング表示スペースを設けることができます。

例えば、プロダクトページに、そのプロダクトが属するコレクションの売れ筋TOP５を表示するなど・・・  
日本のECシーンではよく見るリコメンドをかんたんに実装できます。

同じようなことを考えている方の参考になれば幸いです。

---

<div class="post-metadata">

**Author:** ![junichiokamura](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/junichiokamura/32/299737_2.png) [@junichiokamura](https://community.shopify.com/u/junichiokamura)\
**Post date:** [November 13, 2019, 2:06am UTC](https://community.shopify.com/t/collection-sort/7059/6 "2019-11-13T02:06:10Z")

</div>

ご回答ありがとうございます。素晴らしい！はい、次回同様の質問を探される方はこのページがヒットすることを願います笑
