単体記事のページで、次の記事、前の記事へのリンクを表示させることはよくあると思います。
表示させる方法を三つできてしまったので、せっかくなのでメモとして残しておきます。
たぶん一番基本的な書き方
<?php if(is_single()): ?>
<div class="pagelink">
<?php next_post_link('<p class="pagenext">次の記事:%link</p>','%title',TRUE); ?>
<?php previous_post_link('<p class="pageprev">前の記事:%link</p>','%title',TRUE); ?>
</div>
<?php endif; ?>
これが一番簡単そう。
前後の記事の有無を調べて条件分岐する
<?php if(is_single()): ?>
<div class="pagelink">
<?php if (get_next_post()):?>
<p class="pagenext">次の記事:<?php next_post_link('%link','%title',TRUE); ?></p>
<?php endif; ?>
<?php if (get_previous_post()):?>
<p class="pageprev">前の記事:<?php previous_post_link('%link','%title',TRUE); ?></p>
<?php endif; ?>
</div>
<?php endif; ?>
get_next_post()とget_previous_post()は前後に記事があるかどうか判定するテンプレートタグです。もしリンクが無ければ何も出力しません。next_post_link()とprevious_post_link()の外に出したpタグも判定結果によって出力する、しないが変化します。パラメータにhtmlタグを記述しなくてもよいのですっきりして好ましいです。でも、ちょっとコードが長いなー。
まとめてみました
<?php if(is_single()): ?>
<div class="pagelink">
<?php
if (get_next_post()){
echo '<p class="pagenext">',next_post_link('次の記事:%link','%title',TRUE),'</p>';
}
if (get_previous_post()){
echo '<p class="pageprev">',previous_post_link('前の記事:%link','%title',TRUE),'</p>';
}
?>
</div>
<?php endif; ?>
少しだけ短くなりました(^^;)。
以上、三つほどご紹介しましたが、自分の環境でテストした限りは全て同じ出力結果になりました。
ポイントとしては、出力するリンクにCSSで装飾するためのタグやクラスをどのようにして生成するか、前後に記事が無い場合にタグごと出力する、しないをコントロールすることができる、というところです。
おまけ:パラメータを見てみる
next_post_link()とprevious_post_link()のパラメータは、format、link、in_same_cat、excluded_categoriesとなってます。
実際に使用したコードは→
next_post_link(‘次の記事:%link’,’%title’,TRUE)
って感じです。
formatは文字列。前の記事:%link、次の記事:%link、と入れて次のパラメータで出力される文字列とくっつけました。
linkは一つ前のパラメータ、%linkに出力される内容を設定します。%titleがデフォルトで、記事のタイトルが表示されます。ここに前の記事、次の記事などの文字列も入れることができます。
in_same_catはFALSEがデフォルト。TRUEと入力すれば同じカテゴリーの記事でリンクが生成されます。
excluded_categoriesは表示させたくない記事のカテゴリーIDの番号だそうです。自分は使いませんでした。
参考:テンプレートタグ/next post link – WordPress Codex 日本語版
WordPressで前後記事が存在する場合のみリンク表示 – それからそれから
WordPressのシングルページで前後の投稿リンクを条件判定で出力するやり方 | bl6.jp
ありがとうございました!