今回はWordpressの便利な関数、get_post_ancestorsについて書いていきます。
get_post_ancestors
<?php get_post_ancestors( $post ); ?>
引数は一つだけで、投稿IDや投稿オブジェクトを指定するとその投稿を基点に親を取得します。
試しに以下のような親子階層で、HOBBYの固定ページ内で使用してみます。
<?php
if(is_page('70')){
$parents_id = get_post_ancestors( $post );
var_dump($parents_id);
}
?>
結果
array(3){
[0]=> int(30) //PROFILEのID
[1]=> int(15) //ABOUTのID
[2]=> int(10) //HOMEのID
}
親ページの投稿IDを直近の親から最上位の親に向かって順番に配列で取得できました。
ループ処理で親ごとに様々な情報を取得
この取得した配列を利用して、foreachのループ処理で親ごとに様々な情報を取得することができます。
<?php
foreach( $parents_id as parent_id ){
$parent_link = get_permalink($parent_id); //親URL
$parent_slug = get_post($parent_id)->post_name; // 親スラッグ
$parent_title = get_post($parent_id)->post_title; // 親タイトル
$parent_content = get_post($parent_id)->post_content; //親の記事本文
$parent_category = get_post($parent_id)->post_category; //親カテゴリー
$wp_get_attachment_url(get_post_thumbnail_id( $parent_id )); //親のサムネイル画像
}
?>
あとは、このループの中でechoしてあげれば親ごとに情報が表示されます。
パンくずリストを作る際などに非常に重宝します。
特定の親だけ例外処理
特定の親だけ例外処理をしたい場合などには、get_post_ancestors関数で取得した後、値を指定してあげることで指定した親情報の取得ができます。
<?php
$parents_id[0]; //直近の親
$parents_id[1]; //2つ上の親
$parents_id[2]; //3つ上の親
?>
また、count関数を利用してget_post_ancestors関数で取得した親の配列の値を数えることもできます。
<?php
$pa_count = count($parents_id); //親の数
?>
親の持ち数を条件分岐にして下層ページごとにデザインを変更したい時などに役立つと思います。
一番上の親だけを取得
最上位の親だけ取得したい場合には配列を逆順にして0の値を指定します。
<?php
$re_parents_id = array_reverse ( $parents_id );
$parents_top = $re_parents_id[0];
?>
逆順になっているので、最も遠い親が0のキーの値に代入されます。
先ほどの図を例にすると、HOMEのID:10が取得できます。
WordPressの関数は非常に多く全部を使いこなすのはとても大変ですが、知っていると便利なものも数多くあるのでサイトを作る際に是非使ってみてください。