posts_nav_link()

posts_nav_link()
目次

posts_nav_link()とは?

posts_nav_link() は、投稿の一覧ページ(例:トップページ、カテゴリ、タグ、アーカイブなど)で「前のページ」「次のページ」のリンクを表示するテンプレートタグです。

  • 投稿件数が1ページの表示数(例:10件)を超えている場合に自動的に複数ページに分割され、
  • それぞれのページを移動するリンク(ページナビゲーション)を作るために使われます。

シンプルな出力が特徴で、ページ番号などの細かな制御はできません。

posts_nav_link()の基本構文

posts_nav_link( string $sep = ' » ', string $prelabel = '前のページ', string $nxtlabel = '次のページ' )

posts_nav_link()の引数の説明

引数名説明
$sepstring前後リンクの間に挿入するセパレーター文字列(例:»
$prelabelstring「前のページへ」のラベル
$nxtlabelstring「次のページへ」のラベル

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のページネーションを最小限の手間で導入できる関数です。
細かいカスタマイズを求める場合は不向きですが、「とにかくシンプルなページ送りを実装したい」というときには非常に便利です。

テーマ制作においてページナビゲーションの導入で迷った際は、「誰に使わせるか」「装飾の必要があるか」を基準に選んでみてください。

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

この記事を書いた人

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

目次