3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【wordpress】特定の一覧ページだけ全件表示にする方法

Posted at

##はじめに
wordpressの記事の表示件数は指定がなければ基本的に管理画面で設定している表示件数が反映されます。

明示的にquery_postsを呼び出す場合はよいのですが、カテゴリページなどのアーカイブ系ページだとわざわざテンプレ内で再度query_posts( $query_string.'&posts_per_page=-1' );なんて記述をする必要がでてくると思います。

##なんとなくもやっとする

wordpress側がURLを判別して記事を取得してくれているので、個人的に再度query_postsを呼び出すのはもやっとします。

あとテンプレごとに書くので管理もしにくい(はず

##たぶんスマート

いろいろ調べてたどりついたのがこれです。

functions.php
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

最後に全件取得はあまり件数が多すぎると処理が重くなったり、サーバに負荷をかけてしまうので、そのあたりは注意が必要ですね。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?