・カスタム投稿タイプ別にアーカイブ表示件数を変えるには?
こんな疑問にお答えします。
WordPressのテーマ作成をするとき、案件によってはカスタム投稿が何個もある場合ありますよね。
タイプ別に一覧で表示される件数が違う場合、管理画面側で設定した表示件数と変える指定をしなければいけません。
メインループ内で変えても良いですが、実はfunctions.phpにてあるコードを記述すれば良いんですよね。
簡単にできるよ!
ということで、この記事では「カスタム投稿タイプ別にアーカイブ表示件数の指定方法」について解説していきます!
カスタム投稿タイプ別にアーカイブ表示件数の指定方法
目次
【簡単】カスタム投稿タイプのアーカイブ表示件数を変えたい【WordPress】
WordPressにてアーカイブページの表示件数を変えるには、管理画面の「1ページに表示する最大投稿数」から変更することができます。
下記部分ですね。
これでアーカイブページでは最大10件表示されます。
ただ先ほどのやり方だと、全アーカイブページで共通の投稿件数表示になってしまうんですよね。
例えば下記の投稿タイプがあるとします↓
- 実績投稿
- 製品投稿
- お知らせ投稿
実績のアーカイブでは記事を5つ、お知らせのアーカイブでは記事を3つ表示させたいとなっても、先述した管理画面から別々に表示設定することはできません。。
ただその場合、それぞれのアーカイブページでposts_per_pageを変えれば良いのではないか?と思うはず。
つまり下記ですね。
<?php
$args = array(
'post_type' => '投稿タイプ',
'posts_per_page' => 5,
);
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()): ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<!-- 処理内容 -->
<?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
それぞれのアーカイブページでサブクエリを使い、posts_per_pageを変えれば、表示件数を変えることが可能。
ただサブループを使う場合下記になるんですよね。
- メインクエリで記事を取得するためデータベースアクセス
- サブループで記事を取得するためデータベースアクセス(2回目)
データベースに2回アクセスする必要があります。
この方法でも良いんですが、同じ処理をするのであればデータベースに1回アクセスで完了するやり方のほうが望ましいですよね。
ということでそのやり方を、次に紹介します!
【簡単】カスタム投稿タイプ別にアーカイブ表示件数の指定方法【WordPress】
結論:functions.phpにてアクションフックを使用すればOK。
データベースに1回アクセスするだけでカスタム投稿タイプ別にアーカイブ表示件数を指定することができます。
それが下記コードですね。
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_post_type_archive('カスタム投稿タイプのスラッグ') ) {
$query->set( 'posts_per_page', '5' );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
これで指定したカスタム投稿タイプのアーカイブ表示件数を変えることができます。
今回れの例だと5件ですね。
アクションフックを使用することで、メインクエリのパラメーターを変更することができ、データベースへのアクセス回数を1回に抑えることが可能です。
function change_posts_per_page_and_order($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_post_type_archive('カスタム投稿タイプのスラッグ') ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'orderby', 'date' );
$query->set( 'order', 'DESC' );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page_and_order' );
ちなみに$query->setを使えば、表示件数以外の設定も変えることができますよ。
仮に下記のカスタム投稿タイプがあるとして、表示件数を変える場合、if文の条件分岐を追加すればOK。
- 実績投稿
- 製品投稿
- お知らせ投稿
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_post_type_archive('work') ) {
$query->set( 'posts_per_page', '5' );
}
if ( $query->is_post_type_archive('news') ) {
$query->set( 'posts_per_page', '10' );
}
if ( $query->is_post_type_archive('product') ) {
$query->set( 'posts_per_page', '20' );
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
こうすることで、カスタム投稿タイプごとに異なる表示件数を設定することができます。
ちなみにカスタム投稿タイプの一覧ページ表示方法は下記。
【簡単】カスタム投稿タイプの一覧ページ表示コード【WordPress】【簡単】カスタムタクソノミーのタームのアーカイブ表示件数の指定方法【WordPress】
余談ですが、カスタムタクソノミーのタームのアーカイブ表示件数も変えることができますよ。
function change_terms_per_page($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_tax('カスタムタクソノミーのスラッグ') ) {
$query->set( 'posts_per_page', '10' ); // 表示件数を10に設定
$query->set( 'order', 'ASC' ); // 昇順に並び替える
$query->set( 'orderby', 'name' ); // 名前順に並び替える
return;
}
}
add_action( 'pre_get_posts', 'change_terms_per_page' );
is_taxを使って、スラッグを記述します。
複数指定はこんな感じ↓
function change_terms_per_page($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_tax('カスタムタクソノミーのスラッグ1') ) {
$query->set( 'posts_per_page', '10' );
$query->set( 'order', 'ASC' );
$query->set( 'orderby', 'name' );
return;
}
if ( $query->is_tax('カスタムタクソノミーのスラッグ2') ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'order', 'DESC' );
$query->set( 'orderby', 'count' );
return;
}
if ( $query->is_tax('カスタムタクソノミーのスラッグ3') ) {
$query->set( 'posts_per_page', '15' );
$query->set( 'order', 'ASC' );
$query->set( 'orderby', 'description' );
return;
}
}
add_action( 'pre_get_posts', 'change_terms_per_page' );
【簡単】カスタム投稿タイプ別にアーカイブ表示件数の指定方法【WordPress】:まとめ
- サブループで表示件数を変えるより、アクションフックで変えたほうがDBアクセス数が減る
- functions.phpにてアクションフックを使用すれば、それぞれ表示件数変更可能
- 表示件数以外も指定可能
- カスタムタクソノミーやタームの表示も変えれる
良かったら使ってみてね!