大輔べ

登山・写真・チェンマイ・台湾が好きな「たしろだいすけ」のブログ

WordPressで1ページに表示する最大投稿数をページごとに変える方法

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ページに表示する最大投稿数」ではなく、ページごとに設定した投稿数で表示されます。

なお、今回投稿数を変えたページ以外、また特定のカテゴリーやタグなどで投稿数を変えたい場合は、それに合わせてコードを書き換えてください。

  • omote

    こちらの記事について質問させて下さい。現在、作成中のホームページでこちらの条件分岐を利用したいと思い、コードをお借りして実装を試みたところ、is_front_page( )とis_home( )の分岐がうまく行かず同じ値が返されてしまいました。その後、条件の書き換えを行っていますが解決に至っていない状況です。もしよろしければ具体的なアドバイスを頂けますと幸いです。