MENU

WordPressの一覧ページでページナビゲーション(ページネーション)を作成する方法

カテゴリー一覧・タグ一覧・検索結果ページなど、記事一覧が複数ページに分かれる場合はページナビゲーション(ページネーション)を設置するのが一般的です。

この記事では、WordPress標準関数を使った安全な方法を中心に解説します。


目次

ページナビゲーションとは?

例:以下のような表示

« 前へ  1  2  3  4  次へ »
  • 記事一覧をページ送りできる
  • UX向上
  • クローラビリティ改善(SEOにも重要)

一番簡単な方法:the_posts_pagination()

基本コード

<?php
the_posts_pagination();
?>
  • WordPress標準関数
  • category.php / archive.php / search.php などで使用
  • メインループ終了後に書く

表示を日本語にする

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

クラスを付けてデザインしやすくする

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

HTML構造(出力イメージ)

<nav class="navigation pagination">
  <div class="nav-links">
    <a class="prev page-numbers">« 前へ</a>
    <span class="page-numbers current">2</span>
    <a class="page-numbers">3</a>
    <a class="next page-numbers">次へ »</a>
  </div>
</nav>

出力されたHTML構造を理解すれば、CSSで自由に装飾可能です!


表示されない時のチェックポイント(超重要)

① メインクエリを使っているか?

  • WP_Query のサブループでは表示されない
  • 一覧ページのメインループ限定

② posts_per_page が 1以上か?

  • 表示件数が全件表示だとページが分割されない

③ ループの「後」に書いているか?

❌ NG

while ( have_posts() ) :
  the_posts_pagination();
endwhile;

⭕ OK

while ( have_posts() ) :
  the_post();
endwhile;

the_posts_pagination();

older/newer形式が良い場合

posts_nav_link()

<?php posts_nav_link(); ?>

シンプルな

« 前のページ | 次のページ »

を出したい時向け。


より細かく制御したい場合:paginate_links()

<?php
global $wp_query;

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

向いているケース

  • 独自HTMLで囲みたい
  • デザインを完全に制御したい
  • サブループで使いたい

サブループでのページネーション(補足)

$paged = get_query_var( 'paged' ) ?: 1;

$args = array(
  'post_type'      => 'post',
  'posts_per_page' => 10,
  'paged'          => $paged,
);

$query = new WP_Query( $args );

while ( $query->have_posts() ) :
  $query->the_post();
endwhile;

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

wp_reset_postdata();

👉 一覧ページ以外では必須になる知識


SEO的な注意点

  • ページネーションURLは/category/xxx/page/2/ のように正規化される
  • canonical は WordPress が自動処理
  • noindex 不要(基本)

初心者向けまとめ

  • 一覧ページならthe_posts_pagination() が最優先
  • ループの「後」に書く
  • サブループなら paginate_links()
  • 表示されない時は「メインクエリか?」をまず疑う

WordPress一覧ページの「前へ・次へ」を画像にする方法

ページナビゲーションの
「前へ」「次へ」テキストを矢印画像に置き換えたい場合、
WordPress標準関数でも問題なく対応できます。


方法① the_posts_pagination() で画像を使う(おすすめ)

テーマフォルダ内の画像を使う

例:

/images/arrow-prev.png
/images/arrow-next.png

コード例

<?php
the_posts_pagination(
  array(
    'prev_text' => '<img src="' . get_template_directory_uri() . '/images/arrow-prev.png" alt="前へ">',
    'next_text' => '<img src="' . get_template_directory_uri() . '/images/arrow-next.png" alt="次へ">',
  )
);
?>

出力されるHTMLイメージ

<a class="prev page-numbers" href="...">
  <img src=".../images/arrow-prev.png" alt="前へ">
</a>

👉 aタグの中に img が入る構造
👉 CSSでクリック範囲を広げるのも簡単


CSS例(クリックしやすく)

.page-numbers img {
  width: 24px;
  height: auto;
}

方法② paginate_links() で画像を使う(カスタマイズ向け)

<?php
global $wp_query;

echo paginate_links(
  array(
    'total'     => $wp_query->max_num_pages,
    'current'   => max( 1, get_query_var( 'paged' ) ),
    'prev_text' => '<img src="' . get_template_directory_uri() . '/images/arrow-prev.png" alt="前へ">',
    'next_text' => '<img src="' . get_template_directory_uri() . '/images/arrow-next.png" alt="次へ">',
  )
);
?>

子テーマの場合の注意点

子テーマを使っているならこちらが正解👇

get_stylesheet_directory_uri()
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次