
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()の引数の詳細
引数 | 型 | 説明 |
---|---|---|
$label | string | 表示するリンクテキスト(例:「次のページへ」など) |
$max_page | int | 総ページ数(省略可)。省略すると自動的に判別される |
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()
との使い分けも検討し、目的やデザインに応じて適切な関数を選ぶことが大切です。