スポンサーリンク
今回は各アーカイブページで表示件数を出し分けることができるアクションフックpre_get_postsの使い方についてまとめてみたいと思います。
スポンサーリンク
実装したかった条件
開発中、アーカイブページごとに投稿の表示件数を出し分けたいことがありました。
- デフォルト投稿タイプ(ニュース):ニュース一覧ページで10件出力
- カスタム投稿タイプ(ブログ):ブログ一覧ページで9件出力
ですが、表示件数は下記の設定内容から10件としていました。
管理画面 > 設定 > 表示設定 > 1ページに表示する最大投稿数
メインループを使ったまま、アーカイプページごとに表示件数を制御するには、
pre_get_postsというアクションフックをfunctions.phpに記述します。
pre_get_postsの作りかたの流れ & 書きかた
pre_get_postsアクションフックを使う流れはこんなかんじです。
- 任意名の関数を作る。
- 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で作る方法今回はWordPressのカスタム投稿タイプを「Custom Post Type UI」というプラグインで作る方法をまとめていきたいと思います。...
【カスタムタクソノミー】をCustom Post Type UIで作る方法今回はWordPressのカスタムタクソノミー / カスタム分類を「Custom Post Type UI」というプラグインで作る方法をまとめていきたいと思います。...
スポンサーリンク
スポンサーリンク