WordPressを使っていて記事一覧(アーカイブ)の表示件数を変更したいことがあるかもしれません。そんな時に、テーマ側に設定があるはず!と思って探しても見つからない、なんで?ということはよくあることです。
アーカイブの記事の表示件数の設定はどこにあるのでしょうか?
答えは、Wordrpessの設定⇒表示のなかにあります。表示する記事数の数値を変更することで1ページ当たりの表示件数を変更できます。
しかし、この設定は1つしかないのです。
カスタム投稿タイプなどで投稿タイプを追加した時にも同じ設定が適用されます。それでは嫌だということは結構あります。
今までテーマ側で対応しているのを見たことがなかったので、簡単に変えられないのかな?と思ってましたが、検索するとあっさり答えが見つかったので、備忘録的にメモしておきます。
アーカイブごとに表示件数を変更する
参考サイトにはかなり詳しく書かれておりますが、以下のコードをコピペするだけでほとんどの場合、事足りると思います。
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
/* アーカイブページの時に表示件数を10件にセット */
if ( $query->is_archive() ) {
$query->set( 'posts_per_page', '10' );
}
/* ポストアーカイブの時に表示件数を30件にセット */
if ( $query->is_post_type_archive() ) {
$query->set( 'posts_per_page', '30' );
}
/* 検索ページの時に表示件数を20件にセット */
if ( $query->is_search() ) {
$query->set( 'posts_per_page', '20' );
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
カスタム投稿タイプのアーカイブごとに表示件数を変更する
では、特定のカスタム投稿タイプだけアーカイブ表示件数を変更したいときはどうしたらよいのでしょうか?
こちらのコードで対応できます。
カスタム投稿タイプのアーカイブの指定に、is_archive()を使ったコードを見かけましたが、is_post_type_archive()を使わないと、投稿とカスタム投稿タイプのどちらも共通の設定になってしまうので、注意しましょう。
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_post_type_archive('magazine') ) { //カスタム投稿タイプを指定
$query->set( 'posts_per_page', '20' ); //表示件数を指定
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
まとめ
アーカイブ表示件数の変更は意外と需要のある機能だと思います。例えば、新着情報などでカスタム投稿タイプを追加した時に表示件数を減らしたい時とか、使えるTipsだと思います。