WordPressのサブクエリを使ったページネーションでドはまりしたこと

いやあ、まいったまいった。
タイトルのとおり、WordPressでとあるサイトを作成していた時にサブクエリを使ったページネーションをすることになったのですけど、ページネーションは表示されるものの2ページめ以降にアクセスすると404(ページが見つかりません)になってしまって、いったい何が悪いのかと思案投げ首して原因を調べておりました。

ちなみに、そのページはトップページで、記事の個数は7個という指定になっていたのでした。
で、home.phpに以下のような記述をしました。

<?php
  $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
  $cards = 7;
  $args = array( 'posts_per_page' => $cards, 'paged' => $paged );
  $the_query = new WP_Query( $args );
  if ($the_query->have_posts()) :
    while ($the_query->have_posts()) : $the_query->the_post();
?>
(記事のフォーマットをHTMLで記述、中略)
<?php
endwhile;
pagination( $the_query );
wp_reset_postdata();
?>

で、functions.phpに以下のとおり記述しておきます。

function pagination( $the_query ){
  $big = 999999999;
  echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'current' => max( 1, get_query_var( 'paged' ) ),
    'format' => 'page/%#%/',
    'prev_text'    => __('<'),
    'next_text'    => __('>'),
    'type'    => 'list',
    'total' => $the_query->max_num_pages
  ) );
}

とまあ、ここまではよかったのです。ですが、先述のとおり、2ページ以降へのリンクが404になってしまうという問題が発生して、大変弱りました。
で、ぐーぐる様におすがりして調べ倒すこと1時間。ようやく正解に行き当たりました。

何のことはなくて、管理画面の設定→表示設定で「1ページに表示する最大投稿数」がデフォルトの10件のままになっていたのでした。詳しい理由までは調査していませんが(たぶんソース見ればわかるのだろうけどそんな暇がない)、この最大投稿数がサブクエリで回す1ページ辺りの記事数より大きいと、2ページめ以降が404になってしまうようなのです。
で、これを適当に10から5に変えてみたところ、何事もなかったかのように2ページめ以降も正しく表示されるようになりました。やれやれ、一時はどうなることかと思いましたよ。

というわけで、こんなつまらんオチで申し訳ありませんが、自分用のメモ兼どなたかのお役に立つように、書き残しておきます。あー、疲れた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください