グローバルナビにonをつける
wordpressでheader.phpなどにグローバルナビ(メニュー)を作成する際に該当するメニューの固定ページ表示時にはonなデザインを表示したいことがよくあります。

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; ?>
- 投稿タグ
- wordpress

