【WordPress】プラグイン不要でページ送りを制御する方法

プラグイン未使用チャレンジシリーズ。
WordPressの記事一覧ページで、ページ送り(ページネーション)をカスタマイズする方法をご紹介します。やはりプラグインを使用せずに実装するとパフォーマンスやセキュリティの面でも安心ですね。

ページ送り制御の基礎知識

ページ送り(ページネーション)は、WordPressの記事一覧ページで複数のページにわたる投稿を表示する際に利用されます。デフォルトでは、前へ、次へのリンクが表示されますが、この制御をカスタマイズする方法を書いていきます。

ページ送りを表示するテンプレートファイルの編集

例としてまず、テンプレートファイル index.php を編集します。ページ送りを表示するためのコードを追加します。テンプレートファイルの適切な場所に以下のコードを追加してください。

<?php
      // ページ送りを表示する
      $big = 999999999; // 十分大きな数を指定
      $paginate_links = paginate_links(array(
        'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
        'format' => '?paged=%#%',
        'current' => max(1, get_query_var('paged')),
        'total' => $query->max_num_pages,
        'prev_next' => true,
        'prev_text' => __('前へ'),
        'next_text' => __('次へ'),
      ));
      if ($paginate_links) {
        echo '<div class="information-archive__pagination">' . $paginate_links . '</div>';
      }
?>

上記のコードは、ページ送りを実現するための必要なコードです。$big 変数には十分に大きな数を指定し、paginate_links 関数を使ってページ送りのリンクを生成しています。また、prev_text パラメーターと next_text パラメーターを設定することで、「前へ」「次へ」というテキストを表示しています。

「前へ」「次へ」が不要な場合

番号だけを表示させるには、 prev_textnext_text パラメーターを空にすることで前へ、次へのリンクを表示しないように設定できます。また、 type パラメーターを plain に設定することで、ページネーションの数字がリンクにならず、プレーンテキストとして表示されます。以下がコードになります。

$paginate_links = paginate_links(array(
    'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
    'format' => '?paged=%#%',
    'current' => max(1, get_query_var('paged')),
    'total' => $query->max_num_pages,
    'prev_next' => false,
    'type' => 'plain',
));

番号を囲っているspanに任氏のクラス名を付与する

paginate_links()関数のbefore_page_numberパラメーターとafter_page_numberパラメーターを使用して、選択されたページ番号を括る要素にクラスを追加することができます。

以下のコードでは、選択されたページ番号を <span> 要素で括り、current-pageクラスを付けています。

$paginate_links = paginate_links(array(
    'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
    'format' => '?paged=%#%',
    'current' => max(1, get_query_var('paged')),
    'total' => $query->max_num_pages,
    'prev_next' => false,
    'type' => 'plain',
    'before_page_number' => '<span class="current-page">',
    'after_page_number' => '</span>',
));

このように設定することで、選択されたページ番号が <span class="current-page"></span> で括られ、クラス名 current-page が付けられます。必要に応じて、クラス名を変更することもできます。

以上がWordPressでページ送りを制御する方法となります。自分なり調べてプラグインを使わずにテンプレートファイルを編集することで、どうにか完成しているので、もう少しキレイな書き方もあるかもしれませんが、どうかご了承ください。