shopify

shopify liquidではループできる記事数が50記事しか推奨?されていない問題が発覚。

shopify logo

shopifyで独自でブログ記事一覧をページネーションさせて特定のタグの記事一覧を表示させようと思いました。しかしできないというか諦めるに至った話です。

shopifyはデフォルトでは記事のループが50記事以上できない

例えば以下のコードを実施します。

{% for article in blogs[“news”].articles %}
{{ article.title }}
{% endfor %}

上記の場合ブログ記事の中のハンドルがnewsの記事のタイトルをループで表示しているのですが。この場合最大で50記事分のタイトルが表示されます。newsの記事が60記事あっても50記事までしか表示されません。

shopifyではfor文に対しては以下のように書かれています。

for
You can output a maximum of 50 results per page with for loops. In cases where there are more than 50 results, use the paginate tag to split them across multiple pages.

(forループを使用すると、ページごとに最大50の結果を出力できます。 結果が50を超える場合は、paginateタグを使用して、結果を複数のページに分割します。)

コレクションのプロダクトを取得しようとしても同じ現象が起きてしまいます。

50記事以上もループはできるが1000まで

一応50記事以上もループは可能です。その場合はpagenateタグとbyを使い以下のように書きます。

{% paginate blogs[“news”].articles by 1000 %}
{% for article in blogs[“news”].articles %}
{{ article.title }}
{% endfor %}
{% endpaginate%}

by 1000の1000はMAX値で1000より上はサポートしていないようです。1000個もテスト素材を作るのが面倒だったので実験はしていませんが。

参考:Shopify Discussion:Paginate Above 1000 Products.

またshopify側は50までを推奨というよりは公式のドキュメントでは50までとなっており、1000まで扱えることを書いたりはしていないので50以上は動作保証してないよと言っているように感じます。

参考:Shopify Help Center : Change the number of products shown on collection pages

ちなみに{{paginate.items}}で、paginateされるオブジェクトの総数が確認できます。確認して1000を超えてしまった場合は一度のループで取得できず、次ページに移動となります。

おわり

ということで独自のページネーションを作ろうにも、記事数が1000以上になるとオブジェクトを一度でループして取り込めないため、仕組み作りで断念しました。また特定のタグの記事を抜き取りたかったのですが、ページネートされる記事はタグを無視してしまうので、次ページに送ったとしても歯抜けになってしまい思ったように扱えませんでした。
カスタムアプリとか実装できれば動かせるんですかね。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です