
WordPressの「表示設定」で件数を変えると、サイト全体の記事一覧が一斉に変わってしまいます。
- 「基本は12件だけど、お知らせ一覧だけは5件にしたい」
- 「検索結果は20件くらい一気に見せたい」
といった個別に件数を設定したい場合は、テーマの functions.php にコードを追記します。
目次
なぜ「pre_get_posts」を使うのか?
表示件数を変える方法はいくつかありますが、pre_get_posts というアクションフックを使うのが推奨される方法です。
この方法は、WordPressがデータベースに記事を取りに行く「前(pre)」に、「件数を〇件にして」と命令を書き換えるため、サイトの動作が重くならず、ページ送りの不具合(2ページ目が表示されない等)も起きにくいのがメリットです。
【ケース別】カスタマイズ用コード例
以下のコードを、お使いのテーマ(または子テーマ)の functions.php の最後尾に貼り付けてください。
① 特定のカテゴリーだけ件数を変える
「news」というスラッグ(URLの一部)を持つカテゴリーだけ、表示件数を5件にする例です。
PHP
function my_custom_posts_per_page( $query ) {
// 管理画面、またはメインのクエリ(記事一覧)以外には適用しない
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// カテゴリー「news」のアーカイブページの場合
if ( $query->is_category( 'news' ) ) {
$query->set( 'posts_per_page', 5 );
}
}
add_action( 'pre_get_posts', 'my_custom_posts_per_page' );
② 検索結果ページだけ件数を増やす
サイト内検索の結果は、ユーザーが目的の記事を探しやすくするために多めに表示するのが一般的です。
PHP
function my_search_posts_per_page( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// 検索結果ページの場合
if ( $query->is_search() ) {
$query->set( 'posts_per_page', 20 );
}
}
add_action( 'pre_get_posts', 'my_search_posts_per_page' );
③ カスタム投稿タイプ(事例・実績など)の件数を変える
「works」というカスタム投稿タイプの一覧ページだけ件数を変える例です。
PHP
function my_works_posts_per_page( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// カスタム投稿「works」の一覧ページの場合
if ( $query->is_post_type_archive( 'works' ) ) {
$query->set( 'posts_per_page', 9 ); // 3列レイアウトなら9や12がおすすめ
}
}
add_action( 'pre_get_posts', 'my_works_posts_per_page' );
記述時の注意点とトラブルシューティング
コードを追記する際は、以下のポイントに注意してください。
! $query->is_main_query()を忘れない
これがないと、サイドバーの「最新記事一覧」やフッターのメニューなど、ページ内のあらゆる箇所の件数が変わってしまう原因になります。- バックアップを取る
functions.phpは、1つの記述ミス(セミコロン忘れなど)でサイトが真っ白になることがあります。必ず編集前にバックアップをとってください。 - 優先順位
管理画面の設定よりも、このコードで書いた内容が優先されます。反映されない場合は、スラッグ名(例:news)が正しいか確認してください。
まとめ
管理画面の「表示設定」はサイト全体のベースを作り、特定のページだけはこの pre_get_posts で微調整するとスムーズです。
コンテンツの種類に合わせて、最適な表示件数にデザインしてみてください。

