【WordPress】archiveのページネーションがうまく動かない時

事前準備

表示設定の確認

「設定」→「表示設定」→「1ページに表示する最大投稿数」の表示件数の方が多い場合うまく作動しないことがあるので、特にこだわりがなければ「1件」に設定しておく。

 

サンプルソース

アーカイブページのサンプルソース

<ul>
  <?php
  $wp_query = new WP_Query();
  $param = array(
  'posts_per_page' => '6', //表示件数。-1なら全件表示
  'post_type' => 'hogehoge', //カスタム投稿タイプの名称を入れる
  'paged' => $paged,
  );
  $wp_query->query($param);
  if($wp_query->have_posts()): while($wp_query->have_posts()) : $wp_query->the_post();?>
  <li>
    <a href="<?php echo get_permalink($pickup_id); ?>">
      <?php
      $post_title = get_the_title();
      echo get_the_post_thumbnail( $pickup_id, "full" ,array('alt' => $post_title,)); ?>
    </a>
    <p class="date"><?php the_time("Y.m.d"); ?></p>
    <a href="<?php echo get_permalink($pickup_id); ?>" class="blog_ttl">
      <?php the_title(); ?>
    </a>
  </li>
  <?php endwhile; endif; ?>
</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>

うまく動作しない場合の確認項目

wp_head()とwp_footer()が抜けていないか

wp_head()とwp_footer()が抜けていると作動しない。

</head>の前に<?php wp_head();?>

</body>の前に<?php wp_footer();?>

を記載してあるかの確認。