【WordPress】タクソノミーの記事一覧でページネーションが正常に動かない。

状況メモ

アーカイブページでは正常に動いていたページネーションが、タクソノミーの一覧ページではちゃんと動かなかった。

結論

下記の対応で修正。

表示件数等は「functions.php」で指定する。

taxonomy-xxxxx.php (xxxxxにタクソノミースラッグ)の記述

<ul>
  <!-- 表示件数は functions.php で設定 -->
  <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <li>
      <a href="<?php echo get_permalink($pickup_id); ?>">
        <?php
        $image_id = get_post_thumbnail_id();
        $image_url = wp_get_attachment_image_src($image_id, true);
        ?>
        <div class="img_area" style="background-image: url('<?php the_post_thumbnail_url( 'full' ); ?>')"></div>
      </a>
      <p class="date">
        <?php the_time("Y.m.d"); ?>
      </p>
      <a href="<?php echo get_permalink($pickup_id); ?>" class="ttl">
        <?php the_title(); ?>
      </a>
    </li>
  <?php endwhile; ?>
  <?php endif; wp_reset_postdata(); ?>
</ul>


<div class="pagination">
  <?php global $wp_rewrite;
  $paginate_base = get_pagenum_link(1);
  if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
    $paginate_format = '';
    $paginate_base = add_query_arg('paged', '%#%');
  } else {
    $paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
    user_trailingslashit('page/%#%/', 'paged');;
    $paginate_base .= '%_%';
  }
  echo paginate_links( array(
    'base' => $paginate_base,
    'format' => $paginate_format,
    'total' => $wp_query->max_num_pages,
    'mid_size' => 1,
    'current' => ($paged ? $paged : 1),
    'prev_text' => '<',
    'next_text' => '>',
  ));
  ?>
</div>

functions.phpで表示件数の設定

<?php
//カスタム投稿でページネーションを使う問題を解決するにはpre_get_posts関数を使う
function change_posts_per_page($query) {
  if ( is_admin() || ! $query->is_main_query() ) {
    return;
  }
  if ( $query->is_tax( 'xxxxx' ) ) { //タクソノミー名を設定
  $query->set( 'posts_per_page', '10' ); //表示件数を設定
  }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );