WordPressで特定の親ページを持つ子ページ孫ページ以下全てを対象とする条件分岐(get_post_ancestors)
2022/04/28
自分でも嫌になるくらい毎回忘れるのでWordPress条件分岐備忘録。
サイドバーとかで、特定の親ページを持つ子ページ以下(孫・玄孫)の全ての階層ページを対象とする条件分岐方法。これ、本当に毎回忘れてその都度調べまくってる…。
get_post_ancestorsと言う関数を使います。
これで条件分岐させれば、同一階層(同じ親ページ )にある全ページにサイドバーで同じ物を表示させることができるはずです。例えば、同一階層にある全ページ一覧をその階層ページだけのサイドバーに表示させるとかね。
<?php if(is_page(親ページ1のID) || in_array(親ページ1のID, get_post_ancestors($post->ID))): ?>
<h1>親ページ1の子孫ページ全体に表示される</h1>
<?php elseif(is_page(親ページ2のID) || in_array(親ページ2のID, get_post_ancestors($post->ID))): ?>
<h1>親ページ2の子孫ページ全体に表示される</h1>
<?php endif; ?>
親ページと子ページのみで良いなら下記の物でも可。
まずはfunctions.phpにコレを記述。
function is_parent_slug() {
global $post;
if ($post->post_parent) {
$post_data = get_post($post->post_parent);
return $post_data->post_name;
}
}
で、テンプレートにコレを記述。
<?php if(is_page(親ページ1のslug) || is_parent_slug() === '親ページ1のslug'): ?>
<h1>親ページ1の子ページに表示される</h1>
<?php elseif(is_page(親ページ2のslug) || is_parent_slug() === '親ページ2のslug'): ?>
<h1>親ページ2の子ページに表示される</h1>
<?php endif; ?>
いつになったらググらずスラスラ書けるようになるのかなぁ。