固定ページでページネーションする時のまとめ [WordPress]

Author:

固定ページにページネーションを追加するとき、404エラーになった場合は、rewrite rule が正しくない。

ので、下記を functions.php に追加するべし。

// 固定ページのページネーション用リライトルール
function custom_rewrite_rule() {
  add_rewrite_rule('(information)/page/?([0-9]{1,})/?$', 'index.php?pagename=$matches[1]&paged=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rule');

ちなみに、ページネーションは下記みたいな感じで。
(どこかのサイトのコードを参考に作った記憶があるけど、覚えてない。。。)

<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' => $query->max_num_pages,
    'mid_size' => 2,
    'current' => $paged,
    'prev_text' => '前へ',
    'next_text' => '次へ',
  ));
  ?>
</div>

あと、$paged は下記を追加しておかないと、きちんと値が拾えない。

 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

これでもページングが正しく表示されない(2ページ目だけ404になる)場合、
下記を functions.php に追加してみると良いかもしれない。

/**
 * ページに表示する最大投稿数 を上書き
 */
function change_posts_per_page($query) {
	if ( is_admin() || ! $query->is_main_query() )
			return;
	if ( $query->is_post_type_archive('case') ) { // 投稿タイプのスラッグ
			$query->set( 'posts_per_page', '-1' ); // 表示させる件数
	}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );