稲福一也です。今回は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; ?>
このように使用する方法でも大丈夫です。