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。
ページだけじゃなくカテゴリやタクソノミーも渡せるのが一番の違い。
以下の様な階層をもったカテゴリがあるとして、
「アクション」、「近未来」というカテゴリの親をそれぞれ取得する場合、次の様になります
<?php
$ancestors_ids = get_ancestors( 20, 'category' );
$ancestors_ids = get_ancestors( 31, 'category' );
?>
出力結果はそれぞれ、
Array (
[0] => 10
)
Array (
[0] => 22,
[1] => 10
)
となります