Go to top Go to bottom

previous_post_link() / next_post_link()はリンクを出力するので、URLを文字列として取得することができません。また、URLを文字列として取得できる関数も用意されていませんので、get_previous_post() / get_next_post()を用いて取得します。

次の投稿・前の投稿へのURLを文字列として取得する

get_previous_post( $in_same_term, $excluded_terms, $taxonomy )は、現在の投稿の1つ前の投稿そのものを取得してくる関数で、WordPressループの中で使います。うまく取得できると、WP Postオブジェクトが得られるので、そこから記事のIDを取得することができます。

<?php 
  $prev_post = get_previous_post();
  if( !empty( $prev_post ) ) {
    $url = get_permalink( $prev_post->ID );
  }
?>

これで前の投稿のURLを取得することができます。前の投稿が存在しない場合、get_previous_post()''(空文字)を返しますので、empty()で確認する必要があることに注意してください。

また、get_previous_post()previous_post_link()と似たような引数を取りますので、タクソノミーを限定することもできます。詳しくはこのライブラリを参照してください。

次の記事の場合も全く同様です。

<?php
  $next_post = get_next_post();
  if( !empty( $next_post ) ) {
    $url = get_permalink( $next_post->ID );
  }
?>

前後の投稿のURLを取得する関数を作成する

何度か前後の投稿のURLを取得する機会がある場合は、functions.phpに関数として定義すると便利です。

function twpp_get_adjacent_post_url( $previous = true ) {
  $post = get_adjacent_post( false, '', $previous );
  $url  = '';

  if( !empty( $post ) ) {
    $url = get_permalink( $post->ID );
  }

  return $url;
}

2行目のget_adjacent_post()は隣接する投稿を取得する関数で、第3引数で前後を指定することができます。PreviousとNextで関数を別々に作ってもよいですが、今回はまとめてみました。以下のようにして使います。

$prev_url = twpp_get_adjacent_post_url( true );
$next_url = twpp_get_adjacent_post_url( false );