WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
WEB制作
[WordPress] 親ページ配下(子・孫ページ)をまとめて判定する方法
固定ページをテンプレート内で処理を分けようとしたとき、is_page(‘about’) || is_page(‘company’) || … のように 1ページずつ指定していくと複雑になり管理が難しくなります。
- 特定ページ配下は全部同じヘッダーやサイドメニューを出したい
- パンくず・グロナビの「現在地」判定を親単位でやりたい
- テンプレート分岐を “親ページ基準” にして、保守をラクにしたい
時など
そこで今回は、親ページを1つ指定するだけで、その下層(子・孫…)もまとめて判定できるようにする、functions.php カスタマイズをご紹介します。
■手順
1.functions.php に判定用関数を追加
以下を functions.php に追加します。
/**
* 親ページ配下(子・孫…)かどうかを判定するヘルパー
*
* @param int|string $parent 親ページのID または スラッグ
* @param bool $include_parent 親ページ自身も true に含めるか(デフォルト true)
* @return bool
*/
function is_tree_page($parent, $include_parent = true) {
if (!is_page()) return false;
// 親IDを確定(ID or slug対応)
$parent_id = 0;
if (is_int($parent) || ctype_digit((string)$parent)) {
$parent_id = (int) $parent;
} else {
$obj = get_page_by_path($parent);
if ($obj) $parent_id = (int) $obj->ID;
}
if (!$parent_id) return false;
$current_id = get_queried_object_id();
// 親ページ自身も含める
if ($include_parent && $current_id === $parent_id) return true;
// 現在ページの祖先(親・祖父…)に、指定した親が含まれているか
$ancestors = get_post_ancestors($current_id);
return in_array($parent_id, $ancestors, true);
}2.テンプレート内で使う
例で /service/ 配下をまとめて判定したいような時はこう書きます。
<?php if ( is_tree_page('service') ) : ?>
<?php endif; ?>serviceの部分は固定ページのスラッグまたはIDを指定します。