アーカイブやカスタム投稿一覧のページネーションについて(プラグイン無し)

WordPressでのアーカイブページやカスタム投稿などの一覧ページの時に、
過去苦労しまくっていたページネーション。

難しく考えてしまっていてこれまで色々苦労していたのだが、
意外と簡単に実装出来るじゃないか。。。。。。という事に気づく。
(なので、忘れないようにメモ)

単純なアーカイブ時のときは

単純なループで一覧表示させたいとき

  1. <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  2. //以下出力させない内容を記述
  3. <?php endwhile; endif; wp_reset_postdata(); ?>
  4.  
  5. //ページネーション
  6. <div class="pagination">//ここは任意で当ててるだけなのでクラスなどは自由にカスタマイズ
  7. <?php echo paginate_links( array ( 'type' => 'list',
  8. 'prev_text' => '«',
  9. 'next_text' => '»'
  10. )); ?>
  11. </div>

これでページネーションが出力される。
※管理画面 > 表示設定で1ページあたりの表示件数を設定した件数で表示される。

特定のカスタム投稿など絞り込み
(WP_Query使用時)で一覧表示のときは

特定のカテゴリやカスタム投稿、タクソノミーなどで絞り込んで一覧表示したいとき

  1. <?php
  2. $paged = get_query_var('paged') ? get_query_var('paged') : 1;
  3. $args = array(
  4. 'post_type' => 'post_type',
  5. 'posts_per_page' => 10,//記述しなければ、管理画面 > 表示設定で設定した件数になる。
  6. 'paged' => $paged,
  7. );
  8. $the_query = new WP_Query($args);
  9. if($the_query->have_posts()) :
  10. while($the_query->have_posts()) : $the_query->the_post();
  11. ?>
  12.  
  13. //以下出力させたい内容を記述
  14.  
  15. //ページネーション
  16. <div class="pagination">//ここは任意で当ててるだけなのでクラスなどは自由にカスタマイズ
  17. <?php echo paginate_links( array ( 'type' => 'list',
  18. 'prev_text' => '«',
  19. 'next_text' => '»'
  20. )); ?>
  21. </div>

ページネーションの記述は同じ。テンプレートを作って使い回すと便利かもしれない。

ページネーションのHTML

  1. <div class="pagination">//ここは任意で当ててるだけなのでクラスなどは自由にカスタマイズ
  2. //以下出力されるHTML
  3. <ul class='page-numbers'>
  4. <li><span aria-current="page" class="page-numbers current">1</span></li>
  5. <li><a class="page-numbers" href="サイトurl/page/2/">2</a></li>
  6. <li><a class="page-numbers" href="サイトurl/page/3/">3</a></li>
  7. <li><span class="page-numbers dots"></span></li>
  8. <li><a class="page-numbers" href="サイトurl/page/7/">7</a></li>
  9. <li><a class="next page-numbers" href="サイトurl/page/2/">»</a></li>
  10. </ul>
  11. </div>

上記のように出力されるので、好きにCSSをあててカスタマイズも出来る。

細かい設定については引数を追加したり設定することが出来る。
参考paginate links