WordPressでプラグインを使わずに簡単なページ送りを作成するコードを書いてみました.
«最初 2 3 4 5 6 7 8 最後»
こんな感じのナビゲーションを出力することができます.
以下の2つの関数をfunctions.phpなど適当な場所に貼り付けてください.
// ページネーションを出力
function get_pagination($len = 7){
global $paged, $wp_query;
$current = ( !empty($paged) ) ? intval($paged) : 1;// 現在のページ
$num_pages = ( !empty($wp_query->max_num_pages) ) ? intval($wp_query->max_num_pages) : 1;// 総ページ数
$nums = get_page_nums($num_pages, 1, $current, $len);
$out = '<ul class="pagination">';
$out .= '<li><a href="'.get_pagenum_link(1).'">«最初</a></li>';
foreach($nums as $n){
if( $n == $current ){
$out .= '<li class="current"><span>'.$n.'</span></li>';
} else {
$out .= '<li><a href="'.get_pagenum_link($n).'">'.$n.'</a></li>';
}
}
$out .= '<li><a href="'.get_pagenum_link($num_pages).'">最後»</a></li>';
$out .= '</ul>';
echo $out;
}
// 最大長が$lengthのページ配列を取得
function get_page_nums($num_all, $num_per_page, $current_page = 1, $length = 7){
$num_pages = ceil($num_all / $num_per_page);
$append = 0;
$start = $current_page - floor($length / 2);
if( $start < 1 ){ $append = 1 - $start; $start = 1;}
$prepend = 0;
$end = $current_page + floor($length / 2);
if( $end > $num_pages ){ $prepend = $end - $num_pages; $end = $num_pages;}
$result = array();
for($i = $start - $prepend; $i <= $end + $append; $i++){
if( $i < 1 ){ continue;}
if( $i > $num_pages ){ break;}
$result[] = intval($i);
}
return $result;
}
あとはページ送りを表示したい場所からget_pagination()を呼び出せばOKです.
<?php get_pagination(); ?>
ポイントは、$pagedで現在のページ, $wp_query->max_num_pagesで総ページ数が取得できるということです.

