投稿ページの前後記事へのページネーション(旧版)

個別ページで前後の記事へリンクする方法です。固定ページは不可。
previous_post_link() / next_post_link()の説明ですが、WP4.1〜より便利なthe_post_navigation()が実装されています。

WP4.1〜は、the_post_navigation()が便利

仕様

<?php previous_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonomy ); ?>
<?php next_post_link( $format, $link, $in_same_term, $excluded_terms, $taxonom ); ?>
パラメータ初期値説明
format« %link
%link »
リンクの文字列
link%title表示するリンクのテキスト
in_same_termfalsetrueにすると同じターム内が対象となる
excluded_terms(空)表示させたくないタームIDを指定する。
複数指定する場合は、配列かカンマ区切りで行う
taxonomycategoryタクソノミーの名前を指定。
‘in_the_same_term’がtrueの場合のみ有効。

初期値

<?php previous_post_link( '« %link', '%title', false, '' ); ?>
<?php next_post_link( '%link »', '%title', false, '' ); ?>

get_previous_post(), get_next_post()も同様ですが出力しないため、echoが必要になります。

標準のコードと出力されるHTML

post_linkのデフォルト出力
<?php previous_post_link(); ?>
<?php next_post_link(); ?>
« <a href="https://example.com/2012/01/07/template-sticky/" rel="prev">記事タイトル</a>
<a href="https://example.com/2012/03/14/template-excerpt-generated/" rel="next">記事タイトル</a> »

タイトルの無いエントリーの場合、「過去の投稿へ」「次の投稿へ」となります。

カスタム例と出力内容

※翻訳関数は省略しています・・・

サンプルで使っているCSS

.post-navigation {
	display: table;
	width: 100%;
	padding: 8px 0;
	font-size: 1.4rem;
}
.post-navigation .nav-links {
	display: table-row;
	width: 100%;
	word-break: break-all;
}
.post-navigation .nav-links .nav-previous {
	display: table-cell;
	width: 50%;
	padding-right: 48px;
	text-align: left;
}
.post-navigation .nav-links .nav-next {
	display: table-cell;
	width: 50%;
	padding-left: 48px;
	text-align: right;
}

クラス名は自由につけることができます。

表示文字列を変更する

文字の変更

<?php previous_post_link( '%link', '< 前のエントリー' ); ?>
<?php next_post_link( '%link', '次のエントリー >' ); ?>

htmlタグも使える

<?php previous_post_link( '%link', '<i class="fa fa-chevron-circle-left"></i>' ); ?>
<?php next_post_link( '%link', '<i class="fa fa-chevron-circle-right"></i>' ); ?>

矢印にもリンクを貼る
1行目のデフォルト状態から、2行目のように矢印の位置を2つ目の引数に移動

<?php previous_post_link( '« %link', '%title' ); ?> 
<?php previous_post_link( '%link', '« %title' ); ?>

前後の記事がない場合に、空のDIVタグを表示しない

<div class="post-navigation">
	<div class="nav-links">
	<?php if ( get_previous_post() ) : ?>
		<div class="nav-previous"><?php previous_post_link(); ?></div>
	<?php endif; ?>
	<?php if ( get_next_post() ) : ?>
		<div class="nav-next"><?php next_post_link(); ?></div>
	<?php endif; ?>
	</div>
</div>

同じカテゴリーを対象とする

3つめの引数をtrueにする。

<?php previous_post_link( '« %link', '%title', 'true' ); ?>
<?php next_post_link( '%link »', '%title', 'true' ); ?>

同じタグがついた投稿を対象とする

3つめの引数をtrueにし、5つめでpost_tagを指定する

<?php previous_post_link( '« %link', '%title', 'true' ); ?>
<?php next_post_link( '%link »', '%title', 'true' ); ?>

Codex