der Gegenwart

WP-Pagenaviを使わずにページナビゲーションを表示

吟遊詩人の戯言 » ページナビゲーション機能を改版してみたり」より。

function bmPageNavi() {
 global $wp_rewrite;
 global $wp_query;
 global $paged;
 $paginate_base = get_pagenum_link(1);
 if(($wp_query->max_num_pages) > 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 .= '%_%';
   }
   $result = paginate_links( array(
     'base' => $paginate_base,
     'format' => $paginate_format,
     'total' => $wp_query->max_num_pages,
     'mid_size' => 5,
     'current' => ($paged ? $paged : 1),
   ));
   echo '<ul class="pageNav">'."\n\t<li>".$result."</li>\n</ul>\n";
 endif;
}

functions.phpに書いておいて使う。ul要素にするのが嫌だって場合は、最後のecho文を好みの出力形式に変えればいいと思う。

追記

WordPress 3.0.1*1を利用していて、query_posts関数のパラメータposts_per_pageで1ページ当たりの記事数を指定したときに、ページ送りが上手くいかず、2ページ目以降がNot Foundになることがあった。詳しい条件は不明。そこまで調べる気もないし。

その場合はWordPressの管理画面から設定→表示設定の中にある「1ページに表示する最大投稿数」をposts_per_pageに指定した値よりも小さくすればいい。

  1. ひょっとしたらもっと前から?