WordPressで特定のアーカイブページだけ表示件数を変える方法

通常の投稿カテゴリーやカスタム投稿タイプ、日付別のものなど、アーカイブページの最大表示件数の設定は、管理画面の [表示設定]→[1ページに表示する最大投稿数] で指定できるようになっていますよね。でも、これってすべてのアーカイブページに適用されてしまう。特定の、指定したアーカイブだけ件数を変えたいといった場合、ひと手間加えないといけません。

プラグインを入れてしまうのが手っ取り早いかもしれませんが、出来ればプラグイン使いたくない派の私としてはフィルターやらアクションフックやらでどうにかしたいところです。なので function.php でごにょごにょしていきます。

function 任意の関数名( $query ) {
  if ( is_admin() || ! $query->is_main_query() ) {
    return;
  }
  if ( 表示件数を変える条件 ) {
    $query->set( 'posts_per_page', '表示件数' );
    return;
  }
}
add_action( 'pre_get_posts', '任意の関数名' );


具体的には下記のような感じになるでしょうか。表示件数を変えたいのが特定の1コじゃなくて、2コや3コあるんですっていう欲張りでも大丈夫。

function custom_pre_get_posts( $query ) {
  if ( is_admin() || ! $query->is_main_query() ) {
    return;
  }
  if (is_category()) { //カテゴリーアーカイブなら
    $query->set( 'posts_per_page', '10' ); //10件表示
    return;
  }  if (is_search()) { //検索結果なら
    $query->set( 'posts_per_page', '20' ); //20件表示
    return;
  }  if ( is_post_type_archive( 'foo' ) ) { //カスタム投稿タイプ foo のアーカイブなら
    $query->set( 'posts_per_page', '30' ); //30件表示
    return;
  }
}
add_action( 'pre_get_posts', 'custom_pre_get_posts' );


このコードでは表示件数しか弄っていませんが、他のクエリもセットできるので弄り倒してみるのも良いかもしれません。 $query->set( ‘パラメータ’, ‘パラメータ値’ ); とかで調べるときっと色々出てきますよ!

トラックバックURL