※当サイトではアフィリエイト広告を利用しています

WordPress

【アーカイブページの表示件数を出し分ける】pre_get_postsの使い方

【アーカイブページの表示件数を出し分ける】pre_get_postsの使いかた

今回は各アーカイブページで表示件数を出し分けることができるアクションフックpre_get_postsの使い方についてまとめてみたいと思います。

実装したかった条件

開発中、アーカイブページごとに投稿の表示件数を出し分けたいことがありました。

  • デフォルト投稿タイプ(ニュース):ニュース一覧ページで10件出力
  • カスタム投稿タイプ(ブログ):ブログ一覧ページで9件出力

ですが、表示件数は下記の設定内容から10件としていました。

管理画面 > 設定 > 表示設定 > 1ページに表示する最大投稿数

メインループを使ったまま、アーカイプページごとに表示件数を制御するには、
pre_get_postsというアクションフックをfunctions.phpに記述します。

pre_get_postsの作りかたの流れ & 書きかた

pre_get_postsアクションフックを使う流れはこんなかんじです。

  1. 任意名の関数を作る。
  2. pre_get_postsのアクションフックを作り、
    任意名の関数をアクションフックの2つ目の引数にする。

pre_get_postsアクションフックと関数全体の書きかたは以下のようになります。

function 任意名の関数( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
    return;

    if ( is_post_type_archive( 'カスタム投稿タイプのスラッグ' ) ) {
        $query->set( 'posts_per_page', 表示させたい件数 );
        return;
    }
}
add_action( 'pre_get_posts', '任意名の関数');

 

今回はカスタム投稿タイプのアーカイブページの出し分けをしたかったので
上記となっていますが、他にも様々な条件を実現するのに使うことができます。

今回の条件で使ったコード

今回の条件では、以下のコードで実装しました。

  • デフォルトの投稿タイプ(ニュース):一覧ページで10件
  • カスタム投稿タイプ(ブログ):一覧ページで9件
function my_posts_per_page($query){
  if (is_admin() || !$query->is_main_query())
    return;
  if ($query->is_post_type_archive('blog')) {
    $query->set('posts_per_page', 9);
  }
}
add_action('pre_get_posts', 'my_posts_per_page');

 

以上、アーカイブページごとに表示件数を出し分けるpre_get_postsの使いかたでした。

参考:WordPress Codex アクションフック一覧 pre get posts

【カスタム投稿タイプ】をCustom Post Type UIで作る方法
【カスタム投稿タイプ】をCustom Post Type UIで作る方法今回はWordPressのカスタム投稿タイプを「Custom Post Type UI」というプラグインで作る方法をまとめていきたいと思います。...
【カスタムタクソノミー】をCustom Post Type UIで作る方法
【カスタムタクソノミー】をCustom Post Type UIで作る方法今回はWordPressのカスタムタクソノミー / カスタム分類を「Custom Post Type UI」というプラグインで作る方法をまとめていきたいと思います。...