ミギムキ

[WordPress] ページネーション(ページ送り)をプラグインなしで設置したい

ページネーション設置イメージ

サンプルコード

PHP

<nav class="pagination"> <?php global $wp_query; echo paginate_links(array( 'format' => '/page/%#%' , 'current' => max(1, get_query_var('paged')), 'total' => $wp_query->max_num_pages, 'prev_text' => '', 'next_text' => '', 'type' => 'list' )); ?> </nav>
  • ページネーションの出力は、WordPress側で用意されている「paginate_links」関数を使用しています
  • 色々な引数が用意されていますがすべて設定する必要はなく、最低限サンプルで設定している以下の6個の引数があればOKです
format
  • ページ番号をどのようなURL形式にするかを設定します
  • 指定しない場合、デフォルトの「?page=%#%」が設定され、URLは「https://migi.me/category/css/?page=2」という形式になります
  • サンプルでは「/page/%#%」という設定をしており、こうするとURLは「https://migi.me/category/css/page/2/」
  • どちらでも大差はないと思いますが、私は「?=xxx」パラメーターを他の目的で使用したとき、結合によってパラメーター部分が複雑になってしまうのが嫌だったため、サンプルのような形にしています
current
  • 現在のページ番号を設定します
  • 基本的にはどのようなページでも「max(1, get_query_var('paged'))」でよいです
  • クエリから取得したページ番号と「1」で大きい方が設定されます
total
  • 総ページ数を設定します
  • こちらも「$wp_query->max_num_pages」でクエリ情報を取得する形でよいです
prev_text
  • 「前のページに戻る」のリンクに表記する文字列を指定します
  • 今回はリンクを「<」で表記しますので、文字列を空にするため「""」としています
next_text
  • 「次のページに進む」のリンクに表記する文字列を指定します
  • 戻るリンクと同様に「""」としています
type
  • ページネーションの出力方式を指定します
  • リスト形式で出力した方がCSSを当てはめやすいため、サンプルでは「list」としています
  • サンプルコードはテンプレート化しておいて「get_template_part」関数で呼び出せるようにすると、あちこちで使い回せて便利です

CSS

.pagination { margin: 60px 0px 0px; } .pagination > ul { display: flex; justify-content: center; align-items: center; margin: 0px; list-style: none; } .pagination > ul > li { margin: 0px 0.5em; width: 2em; height: 2em; } .pagination > ul > li > a, .pagination > ul > li > span { display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; color: #3388dd; box-sizing: border-box; } .pagination > ul > li > a { border: 1px solid currentColor; text-decoration: none; } .pagination > ul > li > .current { border: 1px solid #3388dd; background-color: #3388dd; color: #fff; } .pagination > ul > li > .prev, .pagination > ul > li > .next { position: relative; border: none; } .pagination > ul > li > .prev::before, .pagination > ul > li > .next::before { position: absolute; top: 50%; left: 50%; width: 0.75em; height: 0.75em; border-right: 2px solid currentColor; border-top: 2px solid currentColor; content: ""; } .pagination > ul > li > .prev::before { transform: translateX(-50%) translateY(-50%) rotate(225deg); } .pagination > ul > li > .next::before { transform: translateX(-50%) translateY(-50%) rotate(45deg); }

ご質問など受け付けています

記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。

ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。