投稿一覧の表示件数を変更する方法 【WordPress】

WordPressの初期設定では1ページに表示される投稿の最大数が決まっています。その数を増やしたい、減らしたいと思った時に使える設定方法のメモです。

管理画面の表示設定から変更

基本となる表示件数を変更したい場合は、管理メニューの「表示設定」画面にある「1ページに表示する最大投稿数」の項目から変更できます。
デフォルトでは10件となっているので、この数字を表示させたい数に変更して保存します。

特定のページのみ変更したい場合

上記の設定の場合、全てのアーカイブページに適用されます。そうではなく、特定のページのみ表示件数を変更したい場合や投稿全件を表示させたい場合は、別の方法を使用します。

pre_get_posts で最大表示件数を設定する

特定のページのみ変更したい場合は、pre_get_posts を使います。functions.php に以下のようなコードを追記すれば変更できます。

functions.php
function my_preget_posts($query) {
  if (is_admin() || ! $query->is_main_query()){
    return;
  }
  if ($query->is_home()) {
     $query->set('posts_per_page', 3);
     // $query->set('posts_per_page', 設定したい最大表示件数)
     return;
  }
}
add_action('pre_get_posts', 'my_preget_posts');

上記のコードはTOPページで表示させる最大投稿件数を設定しています。
カテゴリー・タグページなら is_home() の部分を is_category()is_tag() に変更すればOK。カスタム投稿タイプの一覧なら is_post_type_archive('post_type_name') です。

この投稿の表示数の変更について調べていると query_posts() を使った方法も結構ありましたが、このコードはWordPressで非推奨のコードになっているのでおすすめしません。
query_posts はNG。 非推奨コードは使わない

ぜひ pre_get_posts を使用してください。

最大投稿数の設定が反映されない

数字を設定したにも関わらず、設定通りに表示されない場合はどこかのファイルに制御している記述があるかもしれません。

うまく反映されない場合はテーマファルのPHPコードを確認してみてください。
posts_per_pagepre_get_posts と言ったコードを検索して、表示件数を設定している箇所があるかチェックしてみましょう。

post_per_page で設定した投稿数で記事が表示されない

私が posts_per_page で表示させたい投稿数にならなかった時の例を紹介します。
記述していたコードはこちらです。

PHP
<?php
  $args = [
    'posts_per_page' => 4,
  ];
  $the_posts = new WP_Query($args);
?>
<h2>投稿一覧</h2>
<ul class="post_list_wrap">
  <?php while ($the_posts->have_posts()):
    $the_posts->the_post(); ?>
    <li class="post_item"><a href="<?php the_permalink(); ?>">
      <p><?php the_title(); ?></p>
    </a></li>
  <?php endwhile; wp_reset_postdata();?>
</ul>

表示される投稿数だけを指定してサブループを回しています。この時に「4件」に設定したはずなのですが、表示されるのは管理画面で設定している「10件」…。

この時の解決した方法は、別のパラメーターを追加したことです。
以下のコードに変更し、パーマリンクの「変更を保存」をクリック。ページを確認してみると、設定した件数で表示されるようになりました。

【変更した箇所】

PHP
  $args = [
    'post_type' => 'post',
    'posts_per_page' => 4,
    'category_name' => 'uncategorized'
  ];

このあとまた posts_per_page だけに戻して数字を変更しても、ちゃんと設定した数字が表示されるようになりました。なのでもしかしたら別の要因があったかもしれませんが、もし同じ書き方で同じ問題が起きていたら試してみてください。

index