フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【WordPress】特定のカテゴリを除外して前の記事・次の記事のリンクURLを取得する方法

get_adjacent_post
next_post_link
previous_post_link
WordPress
リンク
前の記事・次の記事

WordPressの記事詳細ページで特定のカテゴリを除外して前後の記事へのリンクを取得する方法をご紹介したいと思います。

リンクURLを表示する

前の記事のリンクURLを取得する場合はprevious_post_link()、次の記事のリンクURLを取得する場合はnext_post_link()を使用します。

<?php
/* 前の記事の場合 */
previous_post_link();

/* 次の記事の場合 */
next_post_link();
?>

特定のカテゴリを除外して前の記事・次の記事のリンクURLを表示する場合、これらの関数の第4引数にカテゴリIDを指定します。

<?php
/* 前の記事の場合 */
previous_post_link( '%link', '前の記事へ', true, '1' );

/* 次の記事の場合 */
next_post_link( '%link', '次の記事へ', true, '1' );
?>

これで特定のカテゴリを除外してリンクURLを取得する事ができます。

複数のカテゴリを除外したい場合は、第4引数をカンマ区切りで指定します。

<?php
/* 前の記事の場合 */
previous_post_link( '%link', '前の記事へ', true, '1,5' );

/* 次の記事の場合 */
next_post_link( '%link', '次の記事へ', true, '1,5' );
?>

これらの関数を使用すると、関数を実行した場所で直接<a>タグとリンクテキストを含めて出力されます。

<a href="XXX" rel="prev">前の記事へ</a>
<a href="XXX" rel="next">次の記事へ</a>

リンクURLを取得する

続いて、特定のカテゴリを除外して前の記事・次の記事のリンクURLを取得する方法をご紹介します。
特定のカテゴリを除外して前の記事・次の記事のリンクURLを取得する場合、get_adjacent_post()の第2引数にカテゴリIDを指定します。

第3引数はデフォルトでtrueになっていて、指定しなければ前の記事のURLを取得し、falseを指定すると次の記事のURLを取得できます。

<?php
/* 前の記事の場合 */
$prev_url = get_adjacent_post(false,'1');
if( $prev_url ):
    echo "<a href='" . $prev_url . "'>前の記事へ</a>";
endif;

/* 次の記事の場合 */
$next_url = get_adjacent_post(false,'1',false);
if( $next_url ):
    echo "<a href='" . $next_url . "'>次の記事へ</a>";
endif;
?>

先ほどの方法とは異なり、この場合はリンクURLを取得するだけで変数に格納したりする事が出来ます。
取得したURLを出力する場合はechoをする必要があります。

複数のカテゴリを除外したい場合は、第2引数をカンマ区切りで指定します。

<?php
/* 前の記事の場合 */
$prev_url = get_adjacent_post(false,'1,5');
if( $prev_url ):
    echo "<a href='" . $prev_url . "'>前の記事へ</a>";
endif;

/* 次の記事の場合 */
$next_url = get_adjacent_post(false,'1,5',false);
if( $next_url ):
    echo "<a href='" . $next_url . "'>次の記事へ</a>";
endif;
?>

まとめ

いかがでしたか?
絶対にこのタグ構造でリンクボタンを作らないといけないというわけではない場合は、手軽に使えるprevious_post_link()やnext_post_link()を使用し、リンクURLだけを取得したい場合はget_adjacent_post()を使用しましょう。