WordPressで固定ページの親子関係を確実に判定する関数と実装のコツ

WordPress
スポンサーリンク


2025年の最適解!固定ページの親子関係を判定する安全なコード

現代のWordPressテーマ開発において、固定ページの親子関係を判定する場合、最も安全で確実なのは、WordPressコアに用意されている関数を利用することです。

判定に使うべきコア関数:is_page() と get_post_ancestors()

固定ページの親子関係を判定するのに、わざわざオリジナルの関数をfunctions.phpに記述する必要はありません。既存の便利な関数を組み合わせれば、遥かにシンプルに実現できます。

以下のコードは、ある固定ページが特定の親ページのスラッグ(またはID)を持っているかどうかを判定し、trueまたはfalseを返すベストプラクティスです。


なぜこのコードが優れているのか?

このリライトしたコードは、元のコードが抱えていた問題をスマートに解決しています。

①is_page() による安全性の確保

最初に、is_page()を実行することで、そもそも固定ページでなければ即座に false を返し、余計な処理をスキップしています。これは堅牢性を高める上で非常に重要です。

②get_post_ancestors() の活用

投稿(固定ページを含む)の先祖IDの配列を一発で取得するコア関数 get_post_ancestors()を利用しています。元のコードのように自分でループを回す必要がなく、簡潔で高速な処理を実現しました。

③効率的な in_array()

配列の中に目的のIDが含まれているかを判定するのに、PHP標準のin_array()関数を使用。これにより、コードがスッキリし、読みやすく、デバッグしやすいものになっていますね。

functions.phpへの実装方法と実践的な活用事例

リライト後の関数を、実際にテーマの functions.php に記述すれば、WordPress全体でどこからでも呼び出しが可能になります。


応用事例:サイドバーの表示切り替え

例えば、親ページが「サービス(services)」で、その子ページが「プランA」「プランB」とある場合を想定しましょう。

「サービス」配下のページにいるときだけ、特別なサイドバーを表示したい場合は、以下のように記述するのが定石です。


注意点:固定ページ以外の判定

この関数は、あくまで「固定ページ (Page)」での利用を想定しています。

カスタム投稿タイプ(Custom Post Type)で親子関係を判定したい場合は、get_post_ancestors() はそのまま使えますが、is_page() の代わりに is_singular('カスタム投稿タイプ名') でチェックするなど、適宜修正が必要になります。

コメント

タイトルとURLをコピーしました