こんにちは!Weblattです。
今回は、WordPressでプラグインを使わずにページネーションを実装する方法を紹介します。
ページネーション用のプラグインといえば、『WP-PageNavi』が有名です。でも、必要な機能のみでサーバーへの負荷を軽くするなら、プラグインなしで実装することは意外と簡単です。エラーや不具合にも対応しやすい点もメリットですね。
まずテーマファイルのfunctions.php
に以下を記述します。
// ページネーション
// ↓出力関数
// $paged : 現在のページ
// $pages : 全ページ数
// $range : 左右に何ページ表示するか
// $show_only : 1ページしかない時に表示するかどうか
function pagination( $pages, $paged, $range = 5, $show_only = false ) {
$pages = ( int ) $pages; //float型で渡ってくるので明示的に int型 へ
$paged = $paged ?: 1; //get_query_var('paged')をそのまま投げても大丈夫なように
//表示テキスト
$text_before = "<";
$text_next = ">";
if ( $show_only && $pages === 1 ) {
// 1ページのみで表示設定が true の時
echo '<div class="pager_style"><li class="on">1</li></div>';
return;
}
if ( $pages === 1 ) return; // 1ページのみで表示設定もない場合
if ( 1 !== $pages ) {
//2ページ以上の時
echo '<div class="pager_style"><ul>';
if ( $paged > 1 ) {
// 「前へ」 の表示
echo '<li class="prev"><a href="', get_pagenum_link( $paged - 1 ) ,'">', $text_before ,'</a></li>';
}
for ( $i = 1; $i <= $pages; $i++ ) {
if ( $i <= $paged + $range && $i >= $paged - $range ) {
// $paged +- $range 以内であればページ番号を出力
if ( $paged === $i ) {
echo '<li class="on"><a href="#">', $i ,'</a></li>';
} else {
echo '<li><a href="', get_pagenum_link( $i ) ,'">', $i ,'</a></li>';
}
}
}
if ( $paged < $pages ) {
// 「次へ」 の表示
echo '<li class="next"><a href="', get_pagenum_link( $paged + 1 ) ,'">', $text_next ,'</a></li>';
}
echo '</ul></div>';
}
}
function add_my_scripts() {
wp_enqueue_script(
'css_browser_selector',
get_stylesheet_directory_uri().( '/js/css_browser_selector.js' ),
array(),
false,
false
);
}
add_action('wp_enqueue_scripts', 'add_my_scripts');
pagenation
という関数を作ってあげます。
引数の$rangeに任意の設定をしてあげてください。たとえば、$range = 5 なら左右に5ページ表示します。
1ページに何記事表示するかの設定は、WordPress管理画面「設定」→「表示設定」→「1ページに表示する最大投稿数」で指定することができます(初期設定は10件)。
$show_only は1ページしかない時にページネーションを表示するかどうかです。trueなら表示、falseなら非表示です。
次に、archive.php
などページネーションを表示したい箇所に以下を記述します。
<?php
if ( function_exists( 'pagination' ) ) :
pagination( $wp_query->max_num_pages, get_query_var( 'paged' ) );
endif;
?>
あとはCSSでスタイルを整えてあげれば、下記ページネーションが簡単に実装できますよ。
/* ページネーション */
.pager_style{
text-align:center;
padding:30px 0 0 0;
}
.pager_style li{
width:40px;
border:1px solid #BBBBBB;
background:#fff;
display:inline-block;
margin:0 0 10px 0;
}
.pager_style li:hover{
background:#82c264;
}
.pager_style li.on{
background:#82c264;
}
.pager_style li a{
font-size:16px;
text-decoration:none;
display:block;
padding:8px 0;
}
.pager_style li.on a{
color:#fff;
}
.pager_style li a:hover{
color:#fff;
}
.pager_style li.prev{
margin:0 10px 0 0;
}
.pager_style li.next{
margin:0 0 0 10px;
}
@media screen and (max-width: 768px) {
.pager_style li{
width: 30px;
}
.pager_style li a{
font-size:12px;
padding:6px 0;
}
.pager_style li.prev,
.pager_style li.next{
margin:0;
}
}

ぜひ、試してみてください。それでは!