WordPressのアーカイブページなんかには絶対ついている番号付きのページ送り(ページネーション)。
絶対使うけど何故かいつも躓くので備忘録として記事にしてみた。
paginate links
詳しくはWordPress Codexをみよう!
もくじ
new WP_Queryでループのクエリを作成している場合
コンテンツ部分(ループ)
<div class="archiveList">
<?php
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;//ポイント1
$args = array(
'paged' => $paged,//ポイント2
'posts_per_page' => 12,//ポイント3
);
$query = new WP_Query( $args );
?>
<?php if( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
//ループコンテンツ
<?php endwhile; wp_reset_postdata(); ?>
<?php else : ?>
<p class="">記事が見つかりませんでした。</p>
<?php endif; ?>
</div>
$paged = ( get_query_var( ‘paged’ ) ) ? absint( get_query_var( ‘paged’ ) ) : 1;を忘れないように付け足すこと!
‘paged’ => $paged’を付与
*ちなみに私はいつも上記ポイント2点忘れます。そりゃ2ページ目以降表示できないよね。
wp_queryでposts_per_pageを必ず指定すること。
ページ送り部分
<div class="pagination">
<div class="pagination-inner">
<?php
$big = 999999999; // need an unlikely integer
echo paginate_links([
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?page=%#%',
'current' => max(1, get_query_var('paged')),
'total' => $query->max_num_pages,
'prev_text' => __('<'),
'next_text' => __('>'),
]);
?>
</div>
</div><!-- pagination -->WordPress Codexには
new WP_Queryでループのクエリを作成している場合、’total’ パラメーターにWP_Queryオブジェクトの max_num_pages プロパティを設定してください
WordPress Codexより
totalパラメーターにmax_num_pages プロパティを設定するように書かれているので忘れずに設定しましょう。
その他2ページ目以降が表示されない時に試すこと
管理画面から投稿数の設定を見直す
WordPressの管理画面より、
設定>表示設定
で、1ページに表示する最大投稿数を”1″にします。
*変更したら保存を忘れず!
まとめ(番号付きページ送りで2ページ目以降が表示されない時にチェックすること早見)
- $paged = ( get_query_var( ‘paged’ ) ) ? absint( get_query_var( ‘paged’ ) ) : 1;を忘れないように付け足すこと!
- ‘paged’ => $pagedの指定
- 管理画面表示設定より1ページに表示する最大投稿数を”1″にする
- wp_queryで1ページに表示する投稿数を指定
- totalパラメーターにmax_num_pagesプロパティを指定
- 管理画面の表示設定より1ページに表示する最大投稿数を”1″に設定

