get_adjacent_post

(2.5.0以降)
get_adjacent_post - 現在の投稿記事に隣接する投稿記事を取得する

説明

object get_adjacent_post( [ bool $in_same_cat = false [ , mixed $excluded_categories = '' [ , bool $previous = true [ , string $taxonomy = 'category' ] ] ] ] )
現在の投稿記事に隣接する投稿記事を取得する。

パラメータ

  • $in_same_cat$in_same_term
    現在の投稿情報と同じタクソノミー([3.8.0]より前のバージョンはカテゴリー、[3.8.0]以降のバージョンは$taxonomyで指定されたタクソノミー)で絞り込む場合はtrue、限定しない場合はfalse(省略時はfalse)。
  • $excluded_categories$excluded_terms
    除外するターム([3.8.0]より前のバージョンはカテゴリー、[3.8.0]以降のバージョンは$taxonomyで指定されたタクソノミー)のIDを指定(省略時は'')。複数のカテゴリーを除外する場合は、'1 and 3'のように' and 'で連結して指定する’1,3’のようにカンマで連結した文字列を指定するか、配列で指定する。
  • $previous
    前の投稿情報を調べる場合はtrueを、次の投稿情報を調べる場合はfalseを指定(省略時はtrue)。
  • $taxonomy
    [3.8.0]$in_same_termがtrueの場合に同一判定するタクソノミー名を指定(省略時は'category')。

返り値

隣接する投稿情報のオブジェクトを返す。隣接する投稿情報がない場合はnullを返す。

注意

パラメータ$excluded_categoriesは、3.3で仕様変更され、文字列で複数のカテゴリーIDを指定する場合は' and 'で区切ることは非推奨になった。カンマ(,)で区切るか、配列で指定すること。
隣接する投稿記事は、投稿記事の投稿日時を起点に投稿日時でソート後、一番近い投稿記事が対象となる。
なおパラメータ$in_same_catをtrueにした場合、現在の投稿記事が属するカテゴリーのIDを$excluded_categoriesに含めても、そのカテゴリーを除外することはできないので、注意が必要である。具体的には、現在の投稿情報がカテゴリーIDが10と15のカテゴリーに属している場合、次のように指定してもIDが10のカテゴリーは対象から除外されない。

$prev = get_adjacent_post( true, '10' );
IDが15のカテゴリーのみを対象にする場合は、$in_same_catはfalseにし、$excluded_categoriesにはIDが15以外のすべてのカテゴリーIDを列挙したものを指定する必要がある(すべてのカテゴリーのIDが3、5、10、15の場合)。
$prev = get_adjacent_post( false, '3,5,10' );

なお、検索結果は検索条件に紐づいてキャッシュされ、次に検索条件が同じ場合はキャッシュから結果を返している。

[4.4.0]"get_{$adjacent}_post_where"フィルターにパラメータ$taxonomyおよび$postが、"get_{$adjacent}_post_sort"フィルターにパラメータ$postが追加された。

[4.9.0]"get_{$adjacent}_post_sort"フィルターにパラメータ$orderが追加された。

使用例

  • 現在の投稿記事の前の投稿記事を取得する。
    <?php $prev = get_adjacent_post(); ?>
  • 現在の投稿記事と同じカテゴリーの次の投稿記事を取得する。
    <?php $next = get_adjacent_post( true, '', false ); ?>
  • 現在の投稿記事と次の投稿記事を取得する。
    <?php $next = get_adjacent_post( false, '', false ); ?>
  • カテゴリーIDが10と15のカテゴリーを除外して現在の投稿記事と次の投稿記事を取得する。
    <?php $next = get_adjacent_post( false, '10,15', false ); ?>
  • 現在の投稿記事と同じタグの次の投稿記事を取得する。
    <?php $next = get_adjacent_post( true, '', false, '', 'post_tag' ); ?>

フィルター

[2.5.0]本関数が受け取ったパラメータの解析後、"get_{$adjacent}_post_join"フィルターを呼び出す($adjacentは'previous'または'next')。パラメータ$joinはjoin句の内容が、$in_same_termおよび$excluded_termsは本関数が受け取った同名パラメータとなる。
$join = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_term, $excluded_terms );
[2.5.0]上記のフィルター処理後、"get_{$adjacent}_post_where"フィルターを呼び出す($adjacentは'previous'または'next')。パラメータ$joinはwhere句の内容が、$in_same_termおよび$excluded_termsは本関数が受け取った同名パラメータとなる。[4.4.0]パラメータ$taxonomyにはタクソノミー名が($in_same_termがtrueの場合のみ有効)、$postには基準となる投稿情報が格納される。
$where = apply_filters( "get_{$adjacent}_post_where", $where, $in_same_term, $excluded_terms, $taxonomy, $post );
[2.5.0]上記のフィルター処理後、"get_{$adjacent}_post_sort"フィルターを呼び出す($adjacentは'previous'または'next')。パラメータ$sortはorder by句の内容として"ORDER BY p.post_date $order LIMIT 1"が格納されている($order$adjacentが'previous'の場合は'DESC'、'next'の場合は'ASC')。[4.4.0]パラメータ$postには基準となる投稿情報が格納される。[4.9.0]パラメータ$orderには本関数が受け取ったパラメータ$previousがtrueの場合は'DESC'が、falseの場合は'ASC'が格納される。
$sort = apply_filters( "get_{$adjacent}_post_sort", $sort, $post, $order );

アクション

実行するアクションはありません。

ソースファイル

/wp-includes/link-template.php

関連

お勧めコンテンツ

query_posts(WP_Queryクラス)でカテゴリーを絞り込む(2011年9月6日 登録)

久しぶりにquery_posts関数を見直してみると、見知らぬパラメータがいくつか追加されていた。気になったのでカテゴリー関係の指定を'tax_query'パラメータを交えて整理してみた。

親子の固定ページで同じテンプレートを使う(2013年3月20日 登録)

固定ページのテンプレートファイルは「page.php」か、ページ名(スラッグ)または投稿IDを指定したテンプレートファイルになる。固定ページでページデザインが数パターンある場合、通常は「page.php」で振り分けることになるが、もう少しスマートにできないか考えてみた。

Login rebuilder 2.3.0の新機能を紹介(2017年8月31日 登録)

プラグイン「Login rebuilder」はログイン時の履歴(ログ)や不正なログインページへのアクセス履歴を保存している。これらの履歴情報はダッシュボートで確認できるが、バージョン2.3.0においてそれぞれがダウンロードできるようになった。

スマートフォン向けの振り分けを自前で行う(2011年11月2日 登録)

PC向けのサイトをスマートフォン対応する場合、WPtouchやktai styleに代表されるスマートフォン対応のテンプレート切り替えプラグインを使用するのが一般的。そういったプラグインはテンプレート切り替え以外の機能も備えており、そういった機能は必ずしも必要ではない。そんなわけで、ここでは超シンプルなスマートフォン向けのテンプレート切り替えを実現する方法を紹介する。

4.2.3でちょっと変わったショートコード(2015年7月25日 登録)

4.3のリリースまであと少しなわけですが、4.2.3が緊急リリースされました。4.2.2とソースコードを比較すると、ざっくりTinyMCE絡みが多い印象を受けたのですが、ショートコード関連も少し変わっていたので簡単にまとめてみました。

最終更新日時 : 2017-11-16 14:07