MENU

WordPressで親ページとその子・孫ページに条件分岐を適用する方法

稲福一也です。今回はWordPressの条件分岐についてです。
WordPressでは、固定ページの条件分岐is_page();があります。

ただ、is_page();は全体かis_page(‘hoge’)など、指定したページしか反映されません。複数ページを反映させるにはis_page([‘hoge’, ‘hoge2’, ‘hoge3’])配列で複数のページを指定する必要があります。

しかし、固定ページの場合、親、子、孫など、子ページの場合は同じ条件分岐を使用したい場合、毎回追加するのは面倒です。今回は親ページとその子・孫ページに条件分岐を適用する方法です。

サービス service

 サービスの子ページ service_child

  サービスの孫ページ service_grandchild

サービスページの階層があったとします。この時にserviceページ配下のページには同じコードを反映させたい場合は

<?php if ( is_page() && ( is_page('service') || in_array(get_page_by_path('service')->ID, get_post_ancestors(get_the_ID())) ) ): ?>

ここに追加したいコード

<?php endif;?>

このように書きます。

目次

is_page(‘service’)について

こちらは通常の条件分岐です。serviceページの場合は〜するです。親ページですね。指定するのは||が次にあるので、またはに続きます。

in_array();について

in_array()で親ページ以外にも子・孫ページも適用されるようにはします。

第一引数では、一番上の親ページのIDを探したい値として指定します。第二引数では、現在のページの祖先ページのIDを含む配列を指定します。

第一引数のget_page_by_path(‘about’)->IDでは親ページのIDを指定しています。(親ページ)
第二引数のget_post_ancestors(get_the_ID())では、現在のページの祖先ページのIDを取得します。この配列の中に第一引数のID(今回はabout)があれば、適用されるという仕組みです。

親ページだけ外したい場合

<?php if ( is_page() && !is_page('service') && in_array(get_page_by_path('service')->ID, get_post_ancestors(get_the_ID())) ): ?>
ここに子・孫ページだけ適用されます。
<?php endif; ?>>

このように書き換えます。

functions.phpに作る方法

少ないページだけだったら、上記で十分です。もし数が多い場合については、functions.phpに

function is_in_hierarchy($parent_slug) {
    if (is_page()) {
        $parent_id = get_page_by_path($parent_slug)->ID;
        return is_page($parent_slug) || in_array($parent_id, get_post_ancestors(get_the_ID()));
    }
    return false;
}

このように関数を作って

<?php if (is_in_hierarchy('service')): ?>
    <!-- serviceの子・孫ページに対する処理 -->
<?php endif; ?>

このように使用する方法でも大丈夫です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次