カスタム投稿の表示件数をfunctions.phpで変更する

通常の投稿一覧とカスタム投稿一覧の表示件数を分けたい場合functions.phpから表示件数を変更することが可能です。もちろん通常投稿/カスタム投稿両方ともfunctions.phpから制御可能です。

こちらの設定を行うことでいちいち管理画面から設定を変更する必要がなくなるので手間が省けそうです。

設定

表示件数を変更する場合アクションフックpre_get_postsfunctions.phpに記述します。pre_get_postsを使う際の注意点ですが管理画面などのクエリも影響を受けるので扱いには気を付けてください。そのため管理画面上クエリを実行しないよう下記のように設定します。

function custom_pre_get_posts($query){
	// 管理画面以外かつメインクエリ(通常投稿)の場合
	if(!is_admin() && $query->is_main_query()){
		//メインクエリの表示件数 
		$query->set('posts_per_page', 20);

		// メインクエリのカテゴリー一覧ページの表示件数
		if(is_category()){
    			$query->set('posts_per_page', 2);
    		}

		// メインクエリの検索結果の表示件数
		if(is_search()){
    			$query->set('posts_per_page', 8);
		}

		// カスタム投稿'news'の表示件数
		if(is_post_type_archive('news')){
			$query->set('posts_per_page', 15);
		}
  	}
}
add_action('pre_get_posts', 'default_pre_get_posts');

カスタム投稿の表示件数を設定したい場合register_post_typeの投稿タイプキー(’news’)を自身の投稿タイプキーに変更してください。また、カスタム投稿とカスタムタクソノミーの表示件数を変更したい場合次のように設定します。

if(is_post_type_archive('news')){
	$query->set('posts_per_page', 5);
}

if(is_tax()){
	$query->set('posts_per_page', 1);
}