WordPress で現在表示しているページが親・子・孫ページか判別する方法

WordPress で現在表示しているページが親・子・孫ページか判別する方法を紹介します。
例えば、親ページの時だけ何かを出したい時に便利な方法です。

  1. 現在表示しているページが親・子・孫ページか判別する方法
  2. 表示がうまくゆかない場合

現在表示しているページが親・子・孫ページか判別する方法

現在表示しているページが親・子・孫ページか判別するには、親要素の有無を確認したり、子要素があるかどうかを確認します。
例えば、固定ページに親・子・孫ページが登録されている時に、現在表示しているページが親・子・孫ページかを判別するには、次のコードをループ内に追加します。

<?php // 表示しているページが親・子・孫かを判別する方法
if($post->post_parent == 0){ // 親の判別
echo '親';
}else{
$children_args = array(
'post_parent'=> $post->ID,
'post_type' => 'page'
);
if(count(get_children($children_args)) > 0){ // 子と孫の判別
echo '子';
} else {
echo '孫';
}
}
?>

まずは $post から post_parent の値を見て、親要素があるかどうかを判別します。
この段階で、親ページには親が存在しないので「親ページ」を判別できます。

続けて get_children を使って、親ページはあるけど子ページがあるかどうかを判別します。
これにより「子ページ」と「孫ページ」を判別することができます。

固定ページに親・子までしかない場合は、次のコードを追加します。

<?php // 表示しているページが親・子かを判別する方法
if($post->post_parent == 0){ // 親の判別
echo '親';
}else{
echo '子';
}
?>

表示がうまくゆかない場合

紹介した方法で表示がうまくゆかない場合、こちらの記述をお試しください。

<?php // 表示しているページが親・子・孫かを判別する方法
if($post->post_parent == 0){ // 親ページの判別
echo '親';
} else { // 子 or 孫ページの判別
$args = array(
'post_parent'=> $post->ID,
'post_type' => 'page'
);
if(count(get_children($args)) > 0){ // 子ページの判別
echo '子';
} else { // 孫ページの判別
$parent_id = $post->post_parent;
$grandparent = get_post($parent_id);
$grandparent_id = $grandparent->post_parent;
if(!$grandparent_id == 0) {
echo '孫';
} else {
echo '子';
}
}
}
?>

まとめ

WordPress で現在表示しているページが親・子・孫ページか判別する方法を紹介しました。