ミギムキ

[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です。