
posts_nav_link()とは?
posts_nav_link()
は、投稿の一覧ページ(例:トップページ、カテゴリ、タグ、アーカイブなど)で「前のページ」「次のページ」のリンクを表示するテンプレートタグです。
- 投稿件数が1ページの表示数(例:10件)を超えている場合に自動的に複数ページに分割され、
- それぞれのページを移動するリンク(ページナビゲーション)を作るために使われます。
シンプルな出力が特徴で、ページ番号などの細かな制御はできません。
posts_nav_link()の基本構文
posts_nav_link( string $sep = ' » ', string $prelabel = '前のページ', string $nxtlabel = '次のページ' )
posts_nav_link()の引数の説明
引数名 | 型 | 説明 |
---|---|---|
$sep | string | 前後リンクの間に挿入するセパレーター文字列(例:» ) |
$prelabel | string | 「前のページへ」のラベル |
$nxtlabel | string | 「次のページへ」のラベル |
posts_nav_link()の戻り値
- 出力は
echo
による直接出力(return なし) - 該当するページがない場合は何も表示されません
posts_nav_link()の使用例
シンプルな使用
<?php posts_nav_link(); ?>
これだけで、WordPress が自動的に「前のページ」「次のページ」のリンクを挿入します。
ラベルをカスタマイズする
<?php posts_nav_link(' | ', '« 新しい投稿', '古い投稿 »'); ?>
出力例:
<a href="/page/1/">« 新しい投稿</a> | <a href="/page/3/">古い投稿 »</a>
※ page/2/
などは WordPress のページ送りによって自動的に構成されます。
posts_nav_link()の実際の出力例(HTML)
WordPressのデフォルト出力は以下のような形です:
<div class="navigation">
<a href="/page/1/">« 新しい投稿</a> | <a href="/page/3/">古い投稿 »</a>
</div>
※この関数ではページ番号そのもの(1、2、3…)の出力はされません。
posts_nav_link()の使える場面
- トップページ(投稿の一覧)
- カテゴリページ
- タグページ
- カスタム投稿のアーカイブページ
- 月別・年別アーカイブページ
posts_nav_link()の注意点
投稿ループの外で使用する必要があります
次のように書くのが正しい:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<!-- 投稿内容の表示 -->
<?php endwhile; ?>
<!-- ページナビゲーション -->
<div class="navigation">
<?php posts_nav_link(' | ', '« 新しい記事', '古い記事 »'); ?>
</div>
<?php else : ?>
<p>投稿が見つかりませんでした。</p>
<?php endif; ?>
posts_nav_link() の出力される条件
状況 | 出力されるか? |
---|---|
1ページしか投稿がない | 出力されない |
前のページ or 次のページが存在する | 出力される |
posts_nav_link()の関連関数との違い
関数名 | 特徴 | 出力内容 |
---|---|---|
posts_nav_link() | 最もシンプル。前・次のリンクのみ | テキストリンク |
next_posts_link() / previous_posts_link() | 個別に制御可能 | 前・次リンクを個別出力 |
paginate_links() | ページ番号付きの高機能ナビ | 1 2 3 ... 次へ 形式 |
the_posts_pagination() | paginate_links() の簡易ラッパー | Bootstrap風ナビに近い |
CSSで装飾したい場合
出力されるHTMLに自前でクラスをつけたいときは、ラッパー要素で囲みます。
<div class="my-pagination">
<?php posts_nav_link(' | ', '« 新しい記事', '古い記事 »'); ?>
</div>
CSS例:
.my-pagination {
text-align: center;
margin-top: 20px;
}
.my-pagination a {
padding: 8px 12px;
background-color: #f2f2f2;
color: #333;
text-decoration: none;
margin: 0 5px;
}
カスタムクエリで使う場合の注意点
query_posts()
や WP_Query
を使ってカスタムループを回している場合、$wp_query->max_num_pages
を使ってページ数を取得し、next_posts_link()
を代用した方が良い場合があります。
例:
global $wp_query;
$max = $wp_query->max_num_pages;
if ( $max > 1 ) {
next_posts_link('« 古い記事', $max);
previous_posts_link('新しい記事 »');
}
posts_nav_link() は時代遅れ?
実はこの関数は古くからある関数で、現在では paginate_links()
や the_posts_pagination()
の方がモダンで柔軟なため、新規開発ではあまり使われません。
しかし、シンプルなテーマやカスタマイズが不要なブログでは、posts_nav_link()
の手軽さは今でも魅力です。
posts_nav_link()のまとめ
項目 | 内容 |
---|---|
関数名 | posts_nav_link() |
用途 | 投稿一覧ページのページ送りナビゲーション |
出力内容 | 「前のページ」「次のページ」へのリンク(文字リンクのみ) |
使用場所 | 投稿一覧ループの外 |
カスタマイズ性 | 低め(ラベルとセパレータのみ) |
現在の推奨 | paginate_links() か the_posts_pagination() がより柔軟 |
posts_nav_link()
は、WordPressのページネーションを最小限の手間で導入できる関数です。
細かいカスタマイズを求める場合は不向きですが、「とにかくシンプルなページ送りを実装したい」というときには非常に便利です。
テーマ制作においてページナビゲーションの導入で迷った際は、「誰に使わせるか」「装飾の必要があるか」を基準に選んでみてください。