34:カテゴリ一覧表示テンプレートにページネーションを追加
公開日:2019年07月15日
カテゴリー一覧表示時のページネーションを作成します。

テスト投稿を準備
プラグイン「Duplicate Post」を使って投稿を複製して10件ほど用意します。

複製した投稿はステータスが「下書き」です。
チェックボックスを選択して一括編集します。

投稿一覧左上のドロップボックスから「編集」を選択して「適用」をクリックします。

一括編集画面の「ステータス」から「公開済み」を選択して「更新」をクリックします。

投稿一覧の1ページ最大表示投稿数
管理画面「設定」>「表示設定」
投稿一覧の1ページに表示する最大投稿数を変更します。
今回は「3」投稿に変更して「変更を保存」をクリックします。

メインループ用ページネーション用オリジナル関数
メインループ用ページネーション用のpagination関数定義を「functions.php」に追加します。
functions.php
追加
/*********************************
メインループページネーション出力用関数
**********************************/
function pagination($end_size = 1, $mid_size = 2, $prev_next = true) {
global $wp_query;
$page_format = paginate_links(
array(
'current' => max(1, get_query_var('paged')),
'total' => $wp_query->max_num_pages,
'type' => 'array',
'prev_text' => '前へ',//前へのリンク文言
'next_text' => '次へ',//次へのリンク文言
'end_size' => $end_size,//初期値:1 両端のページリンクの数
'mid_size' => $mid_size,//初期値:2 現在のページの両端にいくつページリンクを表示するか(現在のページは含まない)
'prev_next' => $prev_next,//初期値:true リストの中に「前へ」「次へ」のリンクを含むか
)
);
$code = '';
if( is_array($page_format) ) {
$paged = get_query_var('paged') == 0 ? 1 : get_query_var('paged');
$code .= '<div class="pagination">'.PHP_EOL;
$code .= '<ul>'.PHP_EOL;
foreach ( $page_format as $page ) {
$code .= '<li>'.$page.'</li>'.PHP_EOL;
}
$code .= '</ul>'.PHP_EOL;
$code .= '</div>'.PHP_EOL;
$code .= '<div class="pagination-total">'.$paged.'/'.$wp_query->max_num_pages.'</div>'.PHP_EOL;
}
wp_reset_query();
return $code;
}
category.php
ループ外のページネーションを表示したいところでpagination関数を呼び出します。
<?php
get_header();
?>
<div class="blog">
<div class="inner">
<h2 class="title">
<?php
$cat = get_the_category();
$catSlug = $cat[0]->slug;
echo ucfirst( $catSlug );
?>
</h2>
<div class="subtitle">
<?php single_cat_title(); ?>:
<?php echo $wp_query->found_posts; ?>件
</div>
<div class="flex">
<?php /***** メインループ開始 *****/ ?>
<?php if (have_posts()) :?>
<?php while (have_posts()) : the_post(); ?>
<div class="flex-item">
<a href="<?php the_permalink(); ?>">
<div class="image">
<?php
if (has_post_thumbnail()) {
the_post_thumbnail('img_300_200');
} else {
echo '<img src="'.get_template_directory_uri().'/img/no-image.png" alt="'.get_the_title().'">'.PHP_EOL;
}
?>
</div>
<div class="item-title"><?php the_title(); ?></div>
<div class="item-text"><?php the_excerpt(); ?></div>
<div class="item-date"><?php the_time('Y年m月d日'); ?></div>
</a>
</div><!-- .flex-item -->
<?php endwhile; ?>
<?php endif; ?>
<?php /***** メインループ終了 *****/ ?>
</div><!-- .flex -->
<?php // ページネーション ?>
<?php
if ( pagination() ) {
echo pagination();
}
?>
</div><!-- .inner -->
</div><!-- .blog -->
<?php
get_footer();
出力されるHTML
<div class="pagination">
<ul>
<li>
<a class="prev page-numbers" href="一つ前の一覧ページURL">前へ</a>
</li>
<li>
<a class="page-numbers" href="1ページ目のURL">1</a>
</li>
<li>
<span aria-current="page" class="page-numbers current">2</span>
</li>
<li>
<a class="page-numbers" href="3ページ目のURL">3</a>
</li>
<li>
<a class="next page-numbers" href="一つ次の一覧ページURL">次へ</a>
</li>
</ul>
</div>
<div class="pagination-total">2/3</div>
style.css
出力されるHTMLコードに合わせてCSSを追加します。
/*********************************
pagination
**********************************/
.pagination ul {
list-style: none;
padding: 0;
display: flex;
justify-content: center;
width: 960px;
}
.pagination li {
margin: 5px;
}
.page-numbers {
border: 1px solid;
padding: 5px 10px;
text-decoration: none;
color: #333;
}
.page-numbers:hover {
background-color: #fcc;
}
.page-numbers.current {
background-color: #fcc;
}
.pagination-total {
text-align: center;
}
表示結果
ページネーションをクリックして動作確認しましょう。

このページで出てくる関数
WordPress関数は「公式サイトのドキュメント」で確認しましょう。
WordPress関数
WordPress変数
PHP関数
※欠席者対応:lesson25 – lesson26
同じカテゴリーのコンテンツ