[WordPress] 指定したスラッグのページが親や先祖にいるかどうか判定したい
下記の記事でページの親を判定する方法をご紹介しました。
こちらの方法では一親等までしかチェックしないため、例えば「recruit」というスラッグのページの子供に「entry」というページがあり、「entry」ページの子供に「thanks」というページがあった場合、「thanks」ページと「recruit」ページは無関係のページとして判定されてしまいます。
そこで今回は、親だけではなく祖先まで遡って判定する方法をご紹介します。
サンプルコード
functions.php
// 指定したスラッグのページが祖先にいるかどうか判定
function is_ancestor($slug) {
global $post;
$result = false;
if(!empty($post->post_parent)) {
$ancestors = get_post_ancestors($post->ID);
foreach($ancestors as $ancestor) {
$post_data = get_post($ancestor);
if($slug == $post_data->post_name) {
$result = true;
}
}
}
return $result;
}
「get_post_ancestors」は、引数に指定したページの親、祖先となるページのidを配列で返す関数です。
受け取った配列をループで回し、チェック対象となるスラッグが親、祖先にいるか判定します。
使い方
<?php
if(is_page('recruit') || is_ancestor('recruit')) {
?>
<?php
}
else {
?>
<?php
}
?>
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。