##はじめに
wordpressの記事の表示件数は指定がなければ基本的に管理画面で設定している表示件数が反映されます。
明示的にquery_posts
を呼び出す場合はよいのですが、カテゴリページなどのアーカイブ系ページだとわざわざテンプレ内で再度query_posts( $query_string.'&posts_per_page=-1' );
なんて記述をする必要がでてくると思います。
##なんとなくもやっとする
wordpress側がURLを判別して記事を取得してくれているので、個人的に再度query_posts
を呼び出すのはもやっとします。
あとテンプレごとに書くので管理もしにくい(はず
##たぶんスマート
いろいろ調べてたどりついたのがこれです。
function set_nopaging($query) {
if (!is_admin() && $query->is_main_query() && is_category()) {
$query->set('nopaging', 1);
}
}
add_action('pre_get_posts', 'set_nopaging');
こちらはカテゴリページのみ全件表示する場合です。
他の一覧で全件表示したい場合は2行目のif文の中身をif (!is_admin() && $query->is_main_query() && is_year()) {
とかに変えてもらえれば対応できます。
- nopaging
恥ずかしながら、つい先日まで知らなかったパラメータです///
といってもposts_per_page=-1
と意味合いは一緒のようです。
明示的にわかりやすいので、今後はnopaging=1
を使っていこうと思います。
#まとめ
個人的にこういうスマートに書ける方法が見つかるとテンションが上がります。
コードも見やすくなりますしねw
最後に全件取得はあまり件数が多すぎると処理が重くなったり、サーバに負荷をかけてしまうので、そのあたりは注意が必要ですね。