【WordPress】ページネーションをカスタマイズする手順と方法

WordPress
記事内に商品プロモーションを含む場合があります。

WordPressで自作したページネーションをお洒落にカスタマイズしたいな。

この記事では、the_posts_paginationやpaginate_linksといったWordPress関数で作成したページネーションのカスタマイズ方法について解説します(既存テーマのカスタマイズ方法ではないのでご注意ください)。

なお、ページネーションを自作する方法は下の記事で解説していますので、必要にあわせてご参照ください。

スポンサーリンク

WordPressページネーションをカスタマイズする手順

WordPressページネーションのカスタマイズ手順です。

いきなりカスタマイズを始めてもOKですが、慣れないうちは下記手順で進めるのがおすすめです。

  1. 自動生成されるHTMLを把握する
  2. パラメータで表示をカスタマイズ
  3. CSSでスタイリング

実際にカスタマイズしながら解説します。

スポンサーリンク

WordPressページネーションをカスタマイズする方法

ページネーションのカスタマイズを、上記3つの手順で進めます。

最初に、WordPressが自動生成するHTMLを把握しましょう。

自動生成されるHTMLを把握する

「the_posts_pagination」と「paginate_links」とでは、デフォルトで出力されるHTMLと表示が若干異なります。

それぞれチェックしましょう。

the_posts_paginationが出力するHTMLと外観

まずは、the_posts_paginationからです。

<?php the_posts_pagination() ;?>

実行すると、下記HTMLが出力されます。

2行目に「投稿ナビゲーション」というh2タグがありますが、これは読み上げ専用テキストで、画面に出力されないのでスルーでOKです。

<nav class="navigation pagination" aria-label="投稿">
  <h2 class="screen-reader-text">投稿ナビゲーション</h2>
  <div class="nav-links">
  <a class="prev page-numbers" href="http://pagination-test.local/posts/">前へ</a>
    <a class="page-numbers" href="http://pagination-test.local/posts/">1</a>
    <span aria-current="page" class="page-numbers current">2</span>
    <a class="page-numbers" href="http://pagination-test.local/posts/page/3/">3</a>
    <span class="page-numbers dots">…</span>
    <a class="page-numbers" href="http://pagination-test.local/posts/page/6/">6</a>
    <a class="next page-numbers" href="http://pagination-test.local/posts/page/3/">次へ</a>
  </div>
</nav>

the_posts_paginationで表示される外観は、こんな感じです。

paginate_linksが出力するHTMLと外観

次にpaginate_linksです。

こちらは出力に「echo」が必要なので、ご注意ください。

<?php echo paginate_links() ;?>

出力されるHTMLは、the_posts_paginationに比べてシンプルですね。

<a class="prev page-numbers" href="http://pagination-test.local/posts/">« 前へ</a>
<a class="page-numbers" href="http://pagination-test.local/posts/">1</a>
<span aria-current="page" class="page-numbers current">2</span>
<a class="page-numbers" href="http://pagination-test.local/posts/page/3/">3</a>
<a class="page-numbers" href="http://pagination-test.local/posts/page/4/">4</a>
<span class="page-numbers dots">…</span>
<a class="page-numbers" href="http://pagination-test.local/posts/page/6/">6</a>
<a class="next page-numbers" href="http://pagination-test.local/posts/page/3/">次へ »</a>

見た目はこちらです。

the_posts_paginatinとは違い、前後に矢印があるのがわかりますね。

the_posts_paginationとpagination_linksは殆ど変わらない

見た目に若干の違いはありますが、出力されるHTMLを見るとクラス名がほぼ一緒だとわかります。

つまり、the_posts_paginationでもpagination_linksでも、カスタマイズ方法はほぼ変わらないということです。

両者の共通するクラス名と役割は次の通りで、ページネーションのカスタマイズは下記クラスにCSSを当てていく作業が中心なります

  • page-numbers:各ページ番号
  • prev page-numbers:「前へ」の表示
  • next page-numbers:「次へ」の表示
  • page-numbers current:現在のページ番号
  • page-numbers dots:三点ドット(・・・)

その前に、パラメータを使って表示をカスタマイズしましょう。

オプションで表示をカスタマイズする

the_posts_paginationやpagination_linksは「パラメータ」を渡すことで、表示をカスタマイズできます。

パラメータは多々ありますが、主に使うものを列挙します。

  • end_size・・・両端にいくつ数字を表示するか
  • mid_size・・・現在のページ番号の両端にいくつ数字を表示するか
  • show_all・・・すべてのページ番号を表示する
  • prev_next・・・前後に「前へ」「次へ」を表示するか
  • prev_text・・・「前へ」の部分に挿入するテキスト
  • next_text・・・「次へ」の部分に挿入するテキスト

なお、パラメータは下のように配列(array)に入れて渡します。

<?php
  the_posts_pagination(
    array(
      'end_size' => 2,
      'mid_size' => 1,
      'prev_text' => 'Prev',
      'next_text' => 'Next'
    )
  );
?>

それぞれの特徴を解説します。

end_size

end_sizeは「両端に何個のページ番号を表示するか」を決めるオプションです(初期値は1)。

たとえば「2」だと、両端に2つずつページ番号が表示されます。

<?php
  the_posts_pagination(
    array(
      'end_size' => 2,
    )
  );
?>

mid_size

mid_sizeは「現在のページ番号の両端にページ番号をいくつ表示させるか」を決めるパラメータです。

なお、初期値はthe_posts_paginationが「1」で、paginate_linksが「2」です。

たとえば、the_posts_paginationのmid_sizeを「2」とすると、表示は下のようになります。

<?php
  the_posts_pagination(
    array(
      'mid_size' => 2,
    )
  );
?>

show_all

show_allの値をtrueにすると、全てのページ番号が表示されます(デフォルトはfalse)。

<?php
  the_posts_pagination(
    array(
      'show_all' => true,
    )
  );
?>

prev_next

prev_nextは、「前へ」「次へ」の表示をON・OFFできるパラメータです。

falseにするとページ番号のみとなります(デフォルトはtrueです)。

<?php
  the_posts_pagination(
    array(
      'prev_next' => false,
    )
  );
?>

prev_textとnext_text

先述のprev_nextで表示されるテキストは「前へ」「次へ」ですが、prev_textnext_textを使うと、テキストの内容をカスタマイズすることができます。

例えば、それぞれ「Prev」「Next」に変えてみましょう。

<?php
  the_posts_pagination(
    array(
      'prev_next' => true,
      'prev_text' => 'Prev',
      'next_text' => 'Next'
    )
  );
?>

記号を入れることもできます。

paginate_linksでデフォルト出力される記号を入れてみました。

<?php
  the_posts_pagination(
    array(
      'prev_next' => true,
      'prev_text' => '« Prev',
      'next_text' => 'Next »'
    )
  );
?>

FontAwesomeを使うと、よりリッチなカスタマイズになりますね。

※FontAwesomeを使うには、事前にダウンロードもしくは読み込みが必要です。

<?php
  the_posts_pagination(
    array(
      'prev_next' => true,
      'prev_text' => '<i class="fa-regular fa-circle-left"></i>',
      'next_text' => '<i class="fa-regular fa-circle-right"></i>'
    )
  );
?>

以上が、パラメータを使った表示のカスタマイズ方法です。

ここからCSSを使って、より本格的なカスタマイズを始めましょう。

CSSでスタイリングする

ではここから、CSSを使って本格的にカスタマイズをしていきます。

今回は、HTML構造がよりシンプルなpaginate_linksを使って解説します(とはいえ、the_posts_paginationもやる事はほぼ同じです)。

これから、次のようなページネーションを作ります。

あらかじめ、パラメータで表示をカスタマイズしておきました。

<?php
  echo paginate_links(
    array(
      'mid_size' => 1,
      'prev_next' => true,
      'prev_text' => '<i class="fa-regular fa-circle-left"></i>',
      'next_text' => '<i class="fa-regular fa-circle-right"></i>'
    )
  );
?>
</div>

出力されるHTMLと見た目はこちらです。

<a class="prev page-numbers" href="http://pagination-test.local/posts/"><i class="fa-regular fa-circle-left"></i></a>
<a class="page-numbers" href="http://pagination-test.local/posts/">1</a>
<span aria-current="page" class="page-numbers current">2</span>
<a class="page-numbers" href="http://pagination-test.local/posts/page/3/">3</a>
<span class="page-numbers dots">…</span>
<a class="page-numbers" href="http://pagination-test.local/posts/page/10/">10</a>
<a class="next page-numbers" href="http://pagination-test.local/posts/page/3/"><i class="fa-regular fa-circle-right"></i></a>

ページ番号をカスタマイズする

まずは、ページ番号をカスタマイズしていきましょう。

ページ番号の共通クラスはpage-numbersなので、こちらにCSSを記述します。

なお、上記クラスはaタグとspanタグ両方に付与されているので、下記のように記述します。

a.page-numbers,
span.page-numbers {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  color: #0f5474;
  background-color: #fff;
  border: 1px solid #0f5474;
  width: 50px;
  height: 50px;
  border-radius: 50%;
}

見た目を確認すると、ページネーションが縦並びになってしまいました。

これは、ページ番号を円の中心にするためのdisplay: flex;が原因です。

次はこちらを修正しつつ、ページネーション全体を中央寄せにしましょう。

ページネーションを中央寄せにする

ページネーション全体にスタイルを当てるため、divで囲ってクラス名を付けます。

何でもOKですが、今回は「pagination」としました。

<!-- ページネーションをdivで囲む -->
<div class="pagination">
<?php
  echo paginate_links(
    array(
      'mid_size' => 1,
      'prev_next' => true,
      'prev_text' => '<i class="fa-regular fa-circle-left"></i>',
      'next_text' => '<i class="fa-regular fa-circle-right"></i>'
    )
  );
?>
</div>

横並びにするためdisplay:flex;と、全体を中央寄せするためjustify-content: center;を記述します。

.pagination {
  display: flex;
  justify-content: center;
}

再び横並びになり、ページネーション全体が中央寄せになりました。

ページ番号のスタイルを修正する

現在、すべてのページ番号に円が付いた状態です。

これはpage-numbersすべてにスタイルを当たっているのが原因です。

CSSに次のスタイルを書き、左右の矢印とドット(・・・)から円を取り除きます。

.prev.page-numbers,
.next.page-numbers,
.page-numbers.dots {
  border: none;
}

ページ番号の間に余白を作るため、page-numbersの左右に8pxのマージンを追加します。

ただし、矢印とドットに余白は不要のため、マージンを0とします。

a.page-numbers,
span.page-numbers {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  color: #0f5474;
  background-color: #fff;
  border: 1px solid #0f5474;
  width: 50px;
  height: 50px;
  border-radius: 50%;

  /*追加*/
  margin: 0 8px;
}
.prev.page-numbers,
.next.page-numbers,
.page-numbers.dots {
  border: none;

  /*追加*/
  margin: 0;
}

現在のページ番号をスタイリングする

現在のページ番号に、色を反転させるスタイルを当てましょう。

現在のページ番号には「current」というクラス名が自動で付与されるので、こちらにCSSを書きます。

.page-numbers.current {
  color: #fff;
  background-color: #0f5474;
  border: 1px solid #0f5474;
}

現在表示されているページがわかりやすくなりました。

全体の余白を調整する

最後に、本文とページネーション間の余白を調整して終了です。

.pagination {
  display: flex;
  justify-content: center;

  /*追加*/
  margin-top: 60px;
}
スポンサーリンク

まとめ

今回は、WordPressのページネーションをカスタマイズする方法を解説しました。

最初は難しく感じるかもしれませんが、自動的に生成されるHTMLをしっかり把握しさえすれば、カスタマイズのハードルは高くありません。

これを機会に、色んなカスタマイズを楽しんでください。