ブログ
blog

WordPress ページネーション(ページ送り)実装!プラグイン無しでfunctions.phpに直接記述

企業サイトに新着情報機能を実装する場合、または単にブログサイトを運営するにあたっては、ページネーション(ページ送り)機能が必須になる。一般的に、『WP-PageNavi』などのプラグインを使うケースが多いが、わざわざプラグインを使わなくてもfunctions.phpに直接記述することで、独自のページネーションが構築可能だ。そのほうが出力HTMLの融通がきくのでよいだろう。

functions.phpに記述

まずは、functions.phpに下記のように記述する。

function pagination($pages = '', $range = 3) {
 $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 "
".$paged."/".$pages.""; if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "..."; if($paged > 1 && $showitems < $pages) echo ""; for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { echo ($paged == $i)? "".$i."":"".$i.""; } } if ($paged < $pages && $showitems < $pages) echo ""; if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "..."; echo "
\n"; } }

index.php/archive.phpなどに記述

続いて、ページネーションを実装したい箇所に、下記のように記述する。

<?php if (function_exists("pagination")):?>
 <?php pagination($additional_loop->max_num_pages);?>
<?php endif;?>

以上で、ページ送り機能が実装できたはずだ。

余談だが、「pagination」ではなく「pagenation」と間違えて書いてしまわないように注意。(「page」と「paging」の違い。)

おまけのCSS

CSSは適宜ご自由に。

.pagination {
 font-size: 12px;
}
.pagination a {
 background: #f0f0f0;
 text-align: center;
 text-decoration: none;
 line-height: 1;
 margin: 0 4px 2px 0;
 padding: 10px 13px;
 display: inline-block;
}
.pagination a:hover {
 color: #fff;
 background: red;
}
.pagination span {
 text-decoration: none;
 padding: 10px 13px;
 display: inline-block;
}
.pagination .pagination-all {
 margin: 0 4px 0 0;
}
.pagination .current {
 margin: 0 4px 0 0;
}
.pagination .pagination-prev,
.pagination .pagination-next {
 color: #fff;
 padding: 0;
}
.pagination .pagination-prev {
 margin: 0 16px 0 0;
}
.pagination .pagination-next {
 margin: 0 4px 0 16px;
}
.pagination .pagination-prev a,
.pagination .pagination-next a {
 margin: 0;
}
ページの先頭へ