next_posts_link()

next_posts_link()
目次

next_posts_link()とは?

next_posts_link() は、アーカイブページ(投稿一覧やカテゴリページなど)で「次のページ」へのリンクを表示するためのテンプレートタグです。

WordPressは、1ページに表示する投稿数(例:10件)を超える投稿がある場合、自動的にページ分割(ページネーション)を行います。
この関数はその際、より過去の投稿一覧ページ(ページ番号が大きい方)へ進むリンクを表示します。

next_posts_link()の基本構文

next_posts_link( string $label = null, int $max_page = 0 )

next_posts_link()の引数の詳細

引数説明
$labelstring表示するリンクテキスト(例:「次のページへ」など)
$max_pageint総ページ数(省略可)。省略すると自動的に判別される

next_posts_link()の戻り値

返り値は void値は返さず直接HTMLを出力)します。
「次ページが存在しない」場合は何も出力されません。

next_posts_link()の使用例

<?php next_posts_link( '« 古い投稿' ); ?>

出力例:

<a href="https://example.com/page/2/">« 古い投稿</a>

このリンクをクリックすると、「次の投稿一覧ページ」へ遷移します(つまり古い投稿が表示されるページへ)。

よくある実装パターン(前後リンクセット)

<div class="navigation">
  <div class="alignleft"><?php previous_posts_link( '« 新しい投稿' ); ?></div>
  <div class="alignright"><?php next_posts_link( '古い投稿 »' ); ?></div>
</div>

このように previous_posts_link() とセットで使うと、前後ナビゲーションが簡単に実装できます。

注意:next_posts_link()next_post_link() の違い

関数名用途対象
next_posts_link()投稿一覧ページのページ送りアーカイブページなど
next_post_link()個別投稿ページの次の投稿単一投稿ページ

max_page 引数の使い方

$max_page を明示的に指定したい場合は以下のようにします:

global $wp_query;
$max = $wp_query->max_num_pages;

next_posts_link( 'もっと見る', $max );

これは特にカスタムクエリや query_posts() を使っている場合に必要になることがあります。

ページ送りの条件と仕組み

WordPressのページナビゲーションは、クエリ変数 paged によってページ番号が制御されます。
next_posts_link() は内部的に現在のページ番号と $wp_query->max_num_pages を比較し、「次ページが存在する」場合にのみリンクを出力します。

クエリ条件による表示可否

状況表示されるか?
1ページしか投稿がない表示されない
現在が最終ページ表示されない
途中ページ(1〜最大-1)表示される

カスタムクエリで使う場合の注意

以下のように WP_Query で独自クエリを使うとき、正しく動作させるためには max_num_pages を明示的に指定する必要があります。

$paged = get_query_var('paged') ?: 1;
$args = [
  'post_type' => 'news',
  'posts_per_page' => 5,
  'paged' => $paged
];
$custom_query = new WP_Query($args);

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

  next_posts_link( '次のページへ', $custom_query->max_num_pages );
  previous_posts_link( '前のページへ' );
  wp_reset_postdata();
endif;

HTML構造のカスタマイズ例

<nav class="pagination">
  <?php if ( get_next_posts_link() ) : ?>
    <div class="next"><?php next_posts_link('もっと見る »'); ?></div>
  <?php endif; ?>

  <?php if ( get_previous_posts_link() ) : ?>
    <div class="prev"><?php previous_posts_link('« 戻る'); ?></div>
  <?php endif; ?>
</nav>

get_next_posts_link() を使えば、リンクの有無を条件分岐できます。

スタイリング例(CSS)

.pagination {
  display: flex;
  justify-content: space-between;
}
.pagination .next, .pagination .prev {
  font-size: 16px;
}

関連関数との比較

関数名用途ページタイプ出力方法
next_posts_link()次の投稿一覧ページへのリンクアーカイブHTMLを出力
previous_posts_link()前の投稿一覧ページへのリンクアーカイブHTMLを出力
get_next_posts_link()次の投稿一覧リンク(取得用)アーカイブHTMLを返す(echoしない)
paginate_links()詳細なページ番号付きリンクアーカイブ配列/HTML

next_posts_link()のよくある質問(FAQ)

「次のページ」が表示されないのはなぜ?

投稿数が少ないか、現在が最終ページの可能性があります。
また、max_num_pages を正しく指定していないと表示されないこともあります。

投稿をカスタムクエリで並べ替えたらリンクが機能しなくなった

paged パラメータを WP_Query に正しく渡していないとページネーションが機能しません。get_query_var('paged') の値を $args['paged'] に設定してください。

もっとスタイリッシュにページ送りしたい

paginate_links() を使うと、ページ番号や「前へ」「次へ」リンクを細かくカスタマイズできます。より複雑なデザインにはそちらがおすすめです。

next_posts_link()のまとめ

項目内容
関数名next_posts_link()
主な用途投稿一覧やカテゴリページの「次のページへ」リンク
必要条件投稿数が多く、複数ページあるとき
出力内容HTMLの <a> タグ。存在しない場合は出力なし
関連関数previous_posts_link(), get_next_posts_link(), paginate_links()

next_posts_link() は、シンプルなページネーションを実装するうえで最も手軽な関数のひとつです。
特別な設定やプラグイン不要で、自然な投稿一覧のナビゲーションが実現できます。

さらに柔軟にしたい場合は paginate_links() との使い分けも検討し、目的やデザインに応じて適切な関数を選ぶことが大切です。

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

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次