WordPress で同じカテゴリの前後のリンクを取得する方法

WordPress で現在表示されている投稿に紐づく、同じカテゴリの前後の投稿リンクを取得する方法を紹介します。
例えば、同じカテゴリの投稿を続けて見せたい時に便利な方法です。

  1. 同一カテゴリに属する前後の投稿を取得する方法
    1. パラメーターの指定方法

同一カテゴリに属する前後の投稿を取得する方法

同一カテゴリに属する前後の投稿を取得するには、関数の get_previous_post()get_next_post() のパラメーターを指定します。
例えば、カスタムタクソノミーのスラッグが taxonomy_slug の場合に、そのタクソノミーに紐づくタームが関連づけられている記事同士の前後リンクを表示したい場合は、次のコードをテンプレートに追加します。

<?php
// 現在表示されている記事の同一カテゴリに属する前後の投稿を取得
$taxonomy_slug = 'taxonomy_slug'; // 任意のタクソノミースラッグを指定
$prev_post = get_previous_post( true, '', $taxonomy_slug); // 同一カテゴリに属する前の投稿を取得
$next_post = get_next_post( true, '', $taxonomy_slug); // 同一カテゴリに属する次の投稿を取得
// 前後の投稿がある場合は WP_Post オブジェクトを取得
?>
<?php if( $prev_post ): // 前の投稿があれば表示 ?>
<a href="<?php echo get_permalink($prev_post->ID); ?>">
前の記事「<?php echo get_the_title($prev_post->ID); ?>」
</a>
<?php endif; ?>
<?php if( $next_post ): // 前の投稿があれば表示 ?>
<a href="<?php echo get_permalink($next_post->ID); ?>">
次の記事「<?php echo get_the_title($next_post->ID); ?>」
</a>
<?php endif; ?>

同一カテゴリでの前後の投稿リンクの取得を設定した場合、カテゴリのチェックがない投稿には前後のリンクが表示されません。
カテゴリに属さない投稿がある場合は、属さないカテゴリ(例えばその他や OTHER など)のカテゴリを設定してあげましょう。

同一カテゴリに属する前後の投稿を取得する方法

get_previous_post() を例に、パラメータについて簡単に説明します。
パラメーターは次の3つの項目で構成されていて、指定した値に沿った WP_Post オブジェクトを取得します。

<?php get_previous_post( $in_same_term, $excluded_terms, $taxonomy ) ?>

パラメーターの内容は次の通りです。

$in_same_term
論理値
初期値はfalse
同じカテゴリの投稿かどうかを指定。同一カテゴリにする場合は true を指定。
$excluded_terms
文字列
初期値は”
除外するカテゴリーIDを指定。
$taxonomy
文字列
初期値は’category’
タクソノミーを指定。$in_same_term が true の場合に有効。

前後の投稿がある場合は WP_Post オブジェクトを取得しますが、
投稿の ID 以外の取得する場合は注意が必要です。

まとめ

WordPress で現在表示されている投稿に紐づく、同じカテゴリの前後の投稿リンクを取得する方法を紹介しました。