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

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

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

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

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

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

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

特定のページのみ変更したい場合は、pre_get_posts を使います。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。

カスタム投稿タイプの一覧なら以下のような形。

if ($query->is_post_type_archive('post_type_name')) {
   $query->set('posts_per_page', 3);
}

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

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

PCとSPで表示数を変更する

ページごとではなく、表示させるデバイスによって件数を変化させたいこともあると思います。
その場合でも pre_get_posts で設定できます。

wp_is_mobile() を追加すると「モバイルの場合」という条件が追加され、スマホ表示の設定ができます。

function my_preget_posts($query) {
  if (! is_admin() && $query->is_main_query() && wp_is_mobile()){
    $query->set('posts_per_page', 6);
  }
}
add_action('pre_get_posts', 'my_preget_posts');

サブループならループ設定の際に記述

メインループは自動的に取得した情報を表示させるために使用しますが、サブループは自分で設定したデータを取得・出力するものです。

この場合の最大表示数は、wp_query()get_posts() でパラメーターに 'posts_per_page' => 1ページに表示させる数字 を設定します。

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

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

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

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

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

<?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'
  ];
  $the_posts = new WP_Query($args);
?>

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

カテゴリー : WordPress

TOPへ