WordPressで親IDを取得するテンプレートタグ、get_post_ancestors() とget_ancestors() の何が違うのか?

と気になったので調べてみました。

get_post_ancestors()

get_post_ancestors( $post )

引数はひとつだけ。投稿IDまたは投稿オブジェクトを指定すると、指定した投稿の親情報(ID)を配列で取得できる。

親がさらに親を持つ場合の出力は次のようになる。

array(2) {
    [0] => int(一番近い親のID)
    [1] => int(さらに一つ上の親のID)
}

固定ページで親情報を扱いたい時などは以下の様にして使用します。

例 : get_post_ancestors() を使用して全親情報の取得

<?php
$parents_id = get_post_ancestors(); //配列で親IDを取得
foreach($parents_id ad $parent_id):
  //直近から順番に取得される
  $parent_slug  = get_post($parent_id)->post_name;     // 親スラッグ 
  $parent_title = get_post($parent_id)->post_title;    // 親タイトル 
  $parent_url   = get_permalink($parent_id);           // 親URL
  //出力処理など
endforeach;
?>

get_ancestors

get_ancestors( $object_id, $object_type, $resource_type );

引数が3つもある。

指定されたオブジェクトの祖先オブジェクトの配列を返します。祖先オブジェクトの種類を第2引数で指定します。カスタム投稿タイプやカスタムタクソノミーの場合は第3引数も使います。

引数 説明
$object_id オブジェクトのID。
初期値: なし
$object_type 祖先オブジェクトの種類。
'page'(固定ページ), 'category'(カテゴリ), その他階層を持った投稿タイプやタクソノミー名
$resource_type 第一引数 $object_id の種類。
'post_type'(スタム投稿タイプ), 'taxonomy'(カスタムタクソノミー), 省略すると自動設定

引数に渡すIDは投稿IDではなく、オブジェクトのIDとなっています。

固定ページの親情報を調べる時はget_post_ancestors()と同様に固定ページの投稿ID。

ページだけじゃなくカテゴリやタクソノミーも渡せるのが一番の違い。

以下の様な階層をもったカテゴリがあるとして、

image

「アクション」、「近未来」というカテゴリの親をそれぞれ取得する場合、次の様になります

<?php 
  $ancestors_ids = get_ancestors( 20, 'category' ); 
  $ancestors_ids = get_ancestors( 31, 'category' );
?>

出力結果はそれぞれ、

Array (
    [0] => 10
)
Array (
    [0] => 22,
    [1] => 10
)

となります

目次
- Thank you for reading. -

コメント

コメントする