WordPress 4.1のthe_post_navigation()は単一投稿の前後リンクをまとめて表示する
公開日: 執筆:佐藤
WordPress 4.1で単一投稿の末尾へ前後の記事リンクを出すなら、the_post_navigation()を使います。この関数は、前の記事と次の記事へのlinkを、一つのnavigationとしてまとめて表示します。
名前のよく似たthe_posts_navigation()とthe_posts_pagination()は、投稿一覧のpageを移動する関数です。単一投稿の隣へ進むのか、投稿一覧の次pageへ進むのかを先に分けてください。
single.phpでは記事本文の後へ置く
WordPress 4.1の新しいtemplate tagに関する公式説明は、get_the_post_navigation()とthe_post_navigation()を、前後の投稿へ移動するnavigationとして紹介しています。
単一投稿を表示するsingle.phpでは、現在の投稿を処理した後へ次のように置けます。
<?php
the_post_navigation(
array(
'prev_text' => '前の記事: %title',
'next_text' => '次の記事: %title',
'screen_reader_text' => '記事の前後移動',
)
);
?>
%titleは移動先の投稿titleへ置き換わります。prev_textは前の記事、next_textは次の記事に表示する文字です。screen_reader_textでは、navigationの用途を伝える見出しを指定します。
現在の投稿が確定していない場所へ置くと、どの記事を基準に前後を探すのか曖昧になります。まずLoopで単一投稿を表示し、その記事の内容に続く位置へ置いてください。
表示する関数と返す関数を分ける
the_post_navigation()はnavigationをその場で出力します。戻り値を加工してから表示したい場合は、get_the_post_navigation()を使います。
<?php
$navigation = get_the_post_navigation(
array(
'prev_text' => '前の記事: %title',
'next_text' => '次の記事: %title',
)
);
echo $navigation;
?>
通常のtheme templateでそのまま表示するなら、the_post_navigation()で十分です。HTMLを変数へ受け取る目的がないのに、取得してすぐ出力する処理を増やす必要はありません。
WordPress 4.1.1の固定ソースでは、the_post_navigation()がget_the_post_navigation()の結果を出力します。取得する関数と表示する関数の責任を、名前どおりに分けて使えます。
単数形のpostと複数形のpostsを取り違えない
WordPress 4.1には、用途の違う三種類のnavigationがあります。
| 関数 | 対象 | 表示するもの |
|---|---|---|
the_post_navigation() |
単一投稿 | 前と次の投稿へのlink |
the_posts_navigation() |
投稿一覧 | 前と次の一覧pageへのlink |
the_posts_pagination() |
page分割した投稿一覧 | page番号を含むnavigation |
postは一つの投稿を基準にします。postsは複数の投稿が並ぶ一覧を基準にします。関数名の一文字だけで選ばず、利用者が何の隣へ移動するのかで決めてください。
たとえば、記事詳細から次の記事へ進ませたいのにthe_posts_pagination()を置いても、単一投稿の隣は示せません。反対に、検索結果の2page目へ進ませたい場所でthe_post_navigation()を使っても、一覧のpage移動にはなりません。
同じ分類内へ絞る要件は別に決める
WordPress 4.1.1のthe_post_navigation()で指定できるのは、prev_text、next_text、screen_reader_textです。この関数へ、同じcategory内だけを対象にする引数を追加しても、その条件は処理されません。
同じtermの投稿だけへ移動させる必要があるなら、previous_post_link()とnext_post_link()が受け取るin_same_termやtaxonomyを使う方法を検討します。ただし、二つのlinkをまとめるHTMLと、navigationの見出しはtheme側で用意する必要があります。
分類を越えて前後へ進めるのか、同じ分類内だけを回るのかは、見た目ではなくサイト構造の判断です。categoryを記事の主題として運用していないサイトで、同じcategoryへ機械的に絞ると、前後に記事があってもlinkが出ないことがあります。
linkが片方しかない状態も確認する
最初または最後の投稿では、前後linkの片方がありません。WordPress 4.1.1の固定ソースでは、前と次の両方が空ならnavigation全体を出力しません。片方だけ存在する場合は、そのlinkを含むnavigationを出力します。
CSSは、linkが二つある状態だけで決めないでください。前だけ、次だけ、両方、どちらもない状態を確認します。文字数の長い投稿titleでも、本文幅を越えず、linkだと分かる表示にします。
theme修正を外部へ依頼する場合は、single.phpへ関数を追加する作業と、どの投稿を前後関係に含めるかという運用判断を分けます。作業後は、変更したtheme fileと確認した四つの状態を運営側へ残してください。
最初の一手は、single.phpでthe_content()を表示している場所を探すことです。その後へthe_post_navigation()を一度置き、前だけ、次だけ、両方のlinkが出る投稿を確認します。同じ分類内へ絞る要件がある場合だけ、別の関数構成を検討してください。
関連記事

