wordpress 前の記事・次の記事で同じカテゴリー内でリンクする方法

Pocket

wordpress-logo
Wordpressでブログを作っている際によく使う機能が前の記事・次の記事の表示。現在の記事ページに表示して、前後の記事のタイトルとリンクを取得することができます。

基本的には以下のようなコードで簡単に取得・表示可能。

<?php
$prev_post = get_previous_post();
if (!empty( $prev_post )): ?>
  <a href="<?php echo get_permalink( $prev_post->ID ); ?>">
    <?php echo $prev_post->post_title; ?>
  </a>
<?php endif; ?>

しかしこの状態だと全ての投稿に対して前後の記事を取得してしまうため、同じカテゴリーやタクソノミー内に絞り込むことがでません。その方法は以下の通りです。

前後の記事を同じカテゴリ内で取得・表示する方法

現在の投稿の前の記事・次の記事を取得する方法は先ほどのコードを使用すればOK。同じカテゴリー内で前後の記事を取得・表示するには同じテンプレートタグを使用して、パラメータを変更するだけです。

<?php get_previous_post( $in_same_cat, $excluded_categories ) ?>

$in_same_catは同じカテゴリーという意味。デフォルトではfalseになってるので、ここをtrueにすればOK。

$excluded_categoriesは除外したいカテゴリーを指定します。デフォルトでは”になっています。パラメータを設定すると以下のようになります。

<?php get_previous_post( true, 'category-C' ) ?>

これで同じカテゴリー内で取得し、category-Cを除外したリンクを取得できます。

前後の記事を同じタクソノミー・ターム内で取得・表示する方法

では次にカスタムタクソノミーの場合を見ていきます。カスタムタクソノミーの場合は先ほどと同じ方法では上手くいきません。それは先ほどのコードだとデフォルトで用意されているタクソノミーとしてcategoryが指定されているためです。

なのでデフォルトのcategoryを取得したいタクソノミーに変更します。なぜか公式codexにも記載されていないのですが、やり方は簡単。

wp-includes/link-template.php内にあるget_next_postを見ると以下のようになっています。

get_next_post( $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' )

3つめのパラメータでtaxonomyが設定されているのでここを取得したいカスタムタクソノミーに変更してやればOK。

<?php get_next_post( true, '', 'new-category' ) ?>

このように指定することで、new-categoryというカスタムタクソノミー内の同じタームで前後の記事を取得できるようになります。