今回は、WordPressで運営しているWebサイトにページナビ(ページネーション)を設定する方法を紹介します。

WordPressには標準でいくつかのページナビ関連の関数が用意されています
ですが、デフォルトのままではデザイン的にも機能的にも物足りないことが多いです。

そこで、この記事では、コードを用いてページナビを柔軟に実装する方法を中心に解説していきます。

WordPressで使えるページナビ関連の関数

posts_nav_link()

posts_nav_link()は最もシンプルな関数で、「前のページ」「次のページ」リンクだけを表示します。
ページ番号は表示されず、ページナビとしては使いにくいです。

最もシンプルな使い方は、こちらです。

<?php posts_nav_link(); ?>

ちなみに、「前のページ」「次のページ」のテキストや、区切り文字を指定することもできます。

<?php posts_nav_link('|', '« 次の記事', '前の記事 »'); ?>

previous_posts_link() / next_posts_link()

previous_posts_link()next_posts_link()は、一覧ページにおいて「前へ」「次へ」を個別に呼び出せる関数です。
自由にHTMLを組めるので、レイアウトのカスタムも行えます。

具体的には、このような感じで使用できます。

<div class="pagination">
  <div class="prev"><?php previous_posts_link('« 前へ'); ?></div>
  <div class="next"><?php next_posts_link('次へ »'); ?></div>
</div>

the_posts_pagination()

the_posts_pagination()、WordPress4.1以降に実装された関数で、ページ番号付きのページナビを簡単に表示できます。
基本的にはこれを使えば十分です。

<?php
the_posts_pagination( array(
  'mid_size'  => 2,
  'prev_text' => '« 前へ',
  'next_text' => '次へ »',
) );
?>

ちなみに、そのまま出力するのではなく、ページナビのHTMLを一旦変数に格納した場合もあります。
その場合は、get_the_posts_pagination()関数も用意されています。

使い方はほとんど同じなので、合わせてチェックしてみてください。

paginate_links()

paginate_links()関数は、the_posts_pagination()の内部で使用されているページナビ関数です。
細かな設定が可能で、次のような感じで使用することができます。

<?php
global $wp_query;
echo paginate_links( array(
  'total'   => $wp_query->max_num_pages,
  'current' => max( 1, get_query_var( 'paged' ) ),
) );
?>

the_posts_pagination()よりも細かなカスタマイズを行う場合には、paginate_links()関数を使用しましょう。

ページナビをコードで実装する方法

基本的な実装(the_posts_pagination)

<?php
if ( function_exists( 'the_posts_pagination' ) ) {
  the_posts_pagination( array(
    'mid_size'  => 1,
    'prev_text' => '« 前へ',
    'next_text' => '次へ »',
  ) );
}
?>


出力例:
« 前へ 1 2 3 … 10 次へ »

高度なカスタマイズ(paginate_links)

<?php
global $wp_query;
$big = 999999999; // 任意のユニークな数字

echo paginate_links( array(
  'base'      => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
  'format'    => '?paged=%#%',
  'current'   => max( 1, get_query_var('paged') ),
  'total'     => $wp_query->max_num_pages,
  'prev_text' => '« 前へ',
  'next_text' => '次へ »',
  'mid_size'  => 2,
  'type'      => 'list'
) );
?>

カスタムクエリでのページネーション

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
  'post_type' => 'news',
  'posts_per_page' => 5,
  'paged' => $paged
);
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) :
  while ( $the_query->have_posts() ) : $the_query->the_post();
    the_title('<h2>', '</h2>');
  endwhile;

  echo paginate_links( array(
    'total'   => $the_query->max_num_pages,
    'current' => $paged,
  ) );

endif;
wp_reset_postdata();
?>

ページナビのスタイル調整(CSSカスタマイズ)

WordPressの関数で出力されるHTMLは非常にシンプルです。
そのため、ページナビもCSSで見た目を整える必要があります。

以下にCSSのサンプルを乗せておくので、カスタマイズして使用してください。

.pagination {
  display: flex;
  justify-content: center;
  list-style: none;
  padding: 0;
}

.pagination li {
  margin: 0 5px;
}

.pagination a,
.pagination span {
  display: block;
  padding: 8px 12px;
  border: 1px solid #ddd;
  border-radius: 4px;
  text-decoration: none;
  color: #333;
}

.pagination a:hover {
  background: #f0f0f0;
}

.pagination .current {
  background: #0073aa;
  color: #fff;
  border-color: #0073aa;
}

プラグインを利用する方法

「コードを書くのは面倒」「すぐに導入したい」という場合は、ページナビ用のプラグインを利用するのが手っ取り早いです。
最も有名なのがWP-PageNaviというプラグインです。

WP-PageNaviの導入手順

WP-PageNaviを設定する手順はこちらです。

  1. WordPress管理画面から「プラグイン」→「新規追加」をクリック
  2. 「WP-PageNavi」で検索し、インストール&有効化
  3. 管理画面の「設定」→「PageNavi」からデザインやテキストをカスタマイズ


ここまで完了したら、お使いのテーマの一覧ページ(index.php、archive.phpなど)に以下のコードを追記してください。

<?php if (function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>

WP-PageNaviは仕事でもよく使用しています。
サクッとページナビを設定できるので、WordPress標準の関数を使用するよりも簡単です。

WordPress標準の関数とプラグインとの比較

WordPress標準の関数とプラグインと違いを簡単にまとめておきます。

  • コード実装のメリット
    • 軽量で不要な機能がない
    • デザインを自由にカスタマイズできる
    • プラグイン依存を減らせる
  • プラグイン利用のメリット
    • 導入が簡単
    • 管理画面から設定可能
    • コードをほとんど書かなくても使える

カスタマイズ性が高く、余計なプラグインを増やしたくない方には、the_posts_pagination()やpaginate_links()などの関数を使用しましょう。
ただ、管理画面上からサクッとページナビを導入したい方には、プラグイン(WP-PageNaviなど)をおすすめします。

まとめ

今回は、WordPressで構築したWebサイトにページナビを導入する方法をまとめました。

ページナビとは、記事一覧ページなどに設定するページ移動リンクのことで、コンテンツを複数ページに分けることができます。
ページナビを設定することで、ユーザービリティ向上やGoogleのクローリング効率上昇に効果的です。

WordPressでも、標準関数やプラグインを使用してページナビを導入することができます。

  • WordPressには複数のページナビ関数があるが、the_posts_pagination()またはpaginate_links()が主流
  • CSSでのカスタマイズは必須
  • プラグインを使えば導入は簡単だが、カスタマイズ性は落ちる

どのような方法でページナビを導入するかは、Webサイトの規模や開発スキルに合わせて、最適な方法を選びましょう。