WordPressでは、管理画面で「1ページに表示する最大投稿数」を設定することができます。
ですが、場合によって「あるページだけは1ページに表示する最大投稿数を変えたい」ということもあるのではないでしょうか。
今回はそのような場合、どのようにすれば投稿数を変えられるかについて紹介します。
pre_get_postsアクションにユーザー定義関数を登録する
pre_get_postsアクション
- pre_get_posts
- このフックはクエリー変数オブジェクトの生成後、実際にクエリーが実行される前に呼び出されます。
Plugin API/Action Reference/pre get posts « WordPress Codex
最大投稿数をページごとに変えるサンプル
以下のコードは、フロントページ(トップページ)、カテゴリーアーカイブ、タグアーカイブで1ページに表示する最大投稿数を変えるコードになります。functions.phpに書いてください。
コード
function change_pre_get_posts($query){ if(!is_admin() && $query->is_main_query()){ // フロントページ(トップページ)は5件 if(is_front_page()){ $query->set('posts_per_page', 5); } // カテゴリーアーカイブは15件 if(is_category()){ $query->set('posts_per_page', 15); } // タグアーカイブは20件 if(is_tag()){ $query->set('posts_per_page', 20); } } } add_action('pre_get_posts', 'change_pre_get_posts');
解説
まず、条件分岐で管理画面は除き、メインループのときに実行するようにします。これを書き忘れると、管理画面とメインループ以外で表示される投稿数も変わってしまいます。
次にWordPressの条件分岐タグで、ページごとに表示する投稿数を変更します。投稿数はposts_per_page
にセットします。
最後はadd_action()
関数で、今回作成したchange_pre_get_posts
関数をpre_get_posts
に登録します。
以上で、フロントページ(トップページ)、カテゴリーアーカイブ、タグアーカイブでは、管理画面で設定した「1ページに表示する最大投稿数」ではなく、ページごとに設定した投稿数で表示されます。
なお、今回投稿数を変えたページ以外、また特定のカテゴリーやタグなどで投稿数を変えたい場合は、それに合わせてコードを書き換えてください。