• WordPress 4.1のthe_post_navigation()は単一投稿の前後リンクをまとめて表示する

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が出る投稿を確認します。同じ分類内へ絞る要件がある場合だけ、別の関数構成を検討してください。

戻る