【WordPress】親ページとその子孫ページにのみ条件を分岐させる
WordPressでWebサイトを作る際、固定ページで特定の親ページと、
その子孫ページの全ての階層ページで条件分岐させたい時があります。
であれば親(会社情報)とその子孫(概要、沿革、事業所、業所1、事業所2)ページの場合に
条件分岐したい。
固定ページでの条件分岐は「is_page()」を使用しますが
1 2 3 |
<?php if(is_page(array(1,2,3,4,5,6)): ?> 処理 <?php endif; ?> |
や
1 2 3 |
<?php if(is_page(array('company','about','history','office','office01','office02')): ?> 処理 <?php endif; ?> |
などIDかスラッグを1つ1つ記述しなければならず面倒…(つд)
また新たな子孫ページを作るとその度に追記しなければなりません…(つд)(つд)
仮に子孫ページが100ページとかあったとしたらもう…(つд)(つд)(つд
)
ですので
親ページと、その子孫ページを含む条件分岐の方法は無いか調べました。
親ページのスラッグで分岐させる
下記は子ページの場合、親ページのスラッグを取得するコードになります。
functions.phpに記述します。
1 2 3 4 5 6 7 |
function is_parent_slug() { global $post; if ($post->post_parent) { $post_data = get_post($post->post_parent); return $post_data->post_name; } } |
親ページのスラッグが「company(会社情報)」ならば処理を実行させるので
「会社情報の子(概要、沿革、事業所)ページならば処理を実行」
という条件分岐ができます。
1 2 3 |
<?php if(is_parent_slug() === 'company'): ?> 処理 <?php endif; ?> |
これに親ページ(会社情報)も含まれるようにします。
1 2 3 |
<?php if(is_page('company') || is_parent_slug() === 'company'): ?> 処理 <?php endif; ?> |
「会社情報(親)かその子ページ(概要、沿革、事業所)ならば処理を実行」
という条件分岐ができました。
ですが上記は子ページまでの分岐で
孫ページ(「事業所1」「事業所2」)が含まれません。
孫ページも全て含めて分岐させたい
「get_post_ancestors($post)」を使う
「get_post_ancestors」は全ての先祖を取得するので
これを使用することで指定の始祖の子孫であるかを判定できます。
「$post」を「$post->ID」に変更して現在のページIDを取得します。
先祖の中に「1(会社情報)」というIDが存在するならば処理を実行させるので
「会社情報の子孫(概要、沿革、事業所、事業所1、事業所2)ページならば処理を実行」
という条件分岐ができます。
1 2 3 |
<?php if(in_array(1, get_post_ancestors($post->ID))): ?> 処理 <?php endif; ?> |
これに親ページ(会社情報)も含まれるようにします。
1 2 3 |
<?php if(is_page(1) || in_array(1, get_post_ancestors($post->ID))): ?> 処理 <?php endif; ?> |
これで
「会社情報(親)かその子孫(概要、沿革、事業所、事業所1、事業所2)ページならば処理を実行」
の条件分岐ができました(*゚▽゚*)
▼参考にさせていただきました。ありがとうございました。
この記事の投稿者
taka
Webサイト作ってます。
最近のモットー「決して無理をしないスタイル」
twitter: @taka_sbs