南国スキーぶろぐ・Z

岩手県盛岡市のランチ情報・お出かけ情報をメインとしたブログです。

岩手県と盛岡市のブログです

WordPressで特定の親ページを持つ子ページ孫ページ以下全てを対象とする条件分岐(get_post_ancestors)

にほんブログ村 地域生活(街) 東北ブログ 岩手県情報へ にほんブログ村 地域生活(街) 東北ブログ 盛岡市情報へ

2022/04/28

wordpress ,

自分でも嫌になるくらい毎回忘れるので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; ?>

いつになったらググらずスラスラ書けるようになるのかなぁ。