WordPress:シングルページで前後の記事の有無を判定して条件分岐する。

単体記事のページで、次の記事、前の記事へのリンクを表示させることはよくあると思います。
表示させる方法を三つできてしまったので、せっかくなのでメモとして残しておきます。

たぶん一番基本的な書き方

<?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()のパラメータは、formatlinkin_same_catexcluded_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

ありがとうございました!

コメントをどうぞ!