WordPressでカスタム投稿タイプごとにアーカイブの表示件数を変更する

どうも、ホワイトです。

WordPressでカスタム投稿タイプの使用頻度はめっちゃ高いです。

カスタム投稿タイプを使うということは、投稿タイプごとの特徴が分かれていることも多く、内容やレイアウトも異なってくることがあります。

内容のボリュームやレイアウトの違いでアーカイブ(記事一覧)ページに表示する件数もそれぞれ異なってくることがあるかと思います。

そこでカスタム投稿タイプごとのアーカイブページにおける表示件数の設定方法をまとめてみました。

投稿全般におけるアーカイブページの表示件数の設定

WordPress全体の記事一覧ページの表示件数については「設定」→「表示設定」→「1ページに表示する最大投稿数」で設定することが可能です。 ただ、ここは全体での最大投稿数を制御するためのものであって、特定のカスタム投稿タイプの表示件数を設定することはできません。

ここが「10件」となっていれば、カスタム投稿タイプだろうが通常投稿だろうが、どのアーカイブページでも最大10件までしか表示されないことになります。

特定のカスタム投稿タイプでの表示件数を設定する

全体のアーカイブページでの最大投稿数が10件だとして、例えば”activity”というカスタム投稿タイプのアーカイブページだけを最大30件表示できるようにします。 そうしたときのコードが以下となります。

function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;
    if ( $query->is_post_type_archive('activity') ) { //activityというカスタム投稿タイプを指定する
        $query->set( 'posts_per_page', '30' ); //カスタム投稿タイプの最大投稿件数30を指定する
    }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

これで指定したカスタム投稿タイプのアーカイブページの表示件数を設定することができます。

さらに分岐させるときは以下のように記述します。

function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;
    if ( $query->is_post_type_archive('activity') ) { //activityというカスタム投稿タイプを指定する
        $query->set( 'posts_per_page', '30' ); //カスタム投稿タイプの最大投稿件数30を指定する
    }
    if ( $query->is_post_type_archive('event') ) { //eventというカスタム投稿タイプを指定する
        $query->set( 'posts_per_page', '10' ); //カスタム投稿タイプの最大投稿件数10を指定する }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

この条件分岐も必ず使うケースが出てくると思います。

丸々覚えているというのはなかなか難しいので、こういう条件分岐が使えるということは必ず覚えておいて損はないでしょう。

is_post_type_archiveの他にも、is_archive、is_searchといった感じで使い分けができるので重宝させてもらっています。