この記事は公開から1年以上経過しており、内容が古くなっている可能性があります。
このプログラムは、コリスさんのサイトにある「WordPressにプラグイン無しでページネーションを設置する方法」を少し改造したものです。
function custom_pagination($pages = '', $range = 2){ $showitems = ($range * 2)+1; global $paged; if(empty($paged)) $paged = 1; if($pages == ''){ global $wp_query; $pages = $wp_query->max_num_pages; if(!$pages){ $pages = 1; } } if(1 != $pages){ echo '<div class="page_navi">'; if($paged > 1){ echo '<a href="'.get_pagenum_link(1).'">«</a>'; echo '<a href="'.get_pagenum_link($paged - 1).'">‹</a>'; }else{ echo '<span class="current">«</span>'; echo '<span class="current">‹</span>'; } for ($i=1; $i <= $pages; $i++){ //1~3ページまでの設定 if($paged <= $range){ if($paged == $i){ echo '<span class="current">'.$i.'</span>'; }elseif($i <= $showitems){ echo '<a href="'.get_pagenum_link($i).'" class="inactive">'.$i.'</a>'; } } //最後から2つ前~最後までの設定 elseif($paged >= ($pages-1)){ if($paged == $i){ echo '<span class="current">'.$i.'</span>'; }elseif(($pages - $showitems) < $i){ echo '<a href="'.get_pagenum_link($i).'" class="inactive">'.$i.'</a>'; } } //その他 else{ if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems)){ echo ($paged == $i)? '<span class="current">'.$i.'</span>':'<a href="'.get_pagenum_link($i).'" class="inactive">'.$i.'</a>'; } } } if($paged < $pages){ echo '<a href="'.get_pagenum_link($paged + 1).'">›</a>'; echo '<a href="'.get_pagenum_link($pages).'">»</a>'; }else{ echo '<span class="current">›</span>'; echo '<span class="current">»</span>'; } echo '</div>'; } }
改造箇所
もともと利用させていただいたプログラムでは、5ページ分のナビゲーションを出すつもりでも、1~2ページ目までは5ページ分のナビゲーションが出ず、3ページ目になって、ようやく5ページ分のナビゲーションが出るという仕組みでした。(下図参照)
1ページ目のナビゲーション
2ページ目のナビゲーション
3ページ目のナビゲーション
4ページ目のナビゲーション
これでも特に問題はないのですが、できれば3ページ目以降のように、ナビゲーション数は常に一定数を保ちたいと思い、常に5ページ分のナビゲーションが出るように改造しました。(当然ですが5ページ分のナビゲーションが出るのは5ページ分の投稿数がある場合です。2、3、4ページ分しか投稿数が無い場合は2、3、4ページ分のナビゲーションしか出ません。)
なお、ページのナビゲーション数を増やしたい場合は第2引数のrangeに表示したい数の「半分-1」の数値を入れてください。(5ページなら2、7ページなら3、9ページなら4といった感じ。)
コメント