グローバルナビにonをつける

wordpressでheader.phpなどにグローバルナビ(メニュー)を作成する際に該当するメニューの固定ページ表示時にはonなデザインを表示したいことがよくあります。
CONSULTING  addgreen
header.php内で固定ページのスラッグを取得できるので「取得したスラッグが○○○の場合はclass=”on”をつける」といった感じで実装できます。

(the_post()された状態)
<?php if ($post->post_name === 'works') : ?>
  WORKS
<?php else: ?>
  WORKS
<?php endif; ?>

階層のある固定ページ

固定ページが親子の階層を持つ場合,子のページであってもグローバルナビをonなデザインにしたい場合はちょっと話が難しくなります。
固定ページの階層
子ページを開いている場合,header.php内で取得できるのは子ページのスラッグなので,先に実装した方法ではうまくいきません。
そこで固定ページの一番親の固定ページを取得し,そのスラッグを比較対象にすることにしましょう。

一番親の固定ページ取得

単純な関数ですがこんな感じで再帰的に親を探します。

/**
 * 一番親の固定ページ取得
 */
function get_root_page($post) {
	if (!($parent_post = $post->post_parent)) {
		return $post;
	}
	return get_root_page(get_post($parent_post));
}

functions.phpなどに追記すればheader.php内でも使えます。

グローバルナビのonに一番親の固定ページで判断させる

これで階層のある固定ページでもうまくいくようになります。

(the_post()された状態)
<?php
  $_root = get_root_page(get_page(get_the_ID()));
  $slug = $_root->post_name;
?>
<?php if ($slug === 'works') : ?>
  WORKS
<?php else: ?>
  WORKS
<?php endif; ?>