例えばランディングページや採用情報ではヘッダーのグローバルメニューを通常の項目と別の内容を表示したい場合があるかもしれません。

ページによってメニューの内容を差し替えるとユーザーが混乱するので今までやろうと思った事はないのですが、LPなどではたしかに変更したい場合も確かにありえるので考えてみましたが、子テーマの functions.php に以下のように書けば実現できます。

// 下階層用のメニューを追加
add_action(
	'after_setup_theme',
	function() {
		// 採用情報用のナビゲーションを登録
		register_nav_menus( array( 'global-nav-recruit' => 'Header Navigation Recruit' ) );
		// ランディングページ用のナビゲーションを登録
		register_nav_menus( array( 'global-nav-lp-001' => 'Header Navigation LP-001' ) );
	}
);

// 下階層用のメニューの差し替え処理
add_filter(
	'wp_nav_menu_args',
	function( $args ) {

		// 差し替え対象のメニューの位置を指定
		// Lightning G3 のヘッダーナビゲーションの場合 gloval-nav
		if ( 'global-nav' === $args['theme_location'] ) {

			// 固定ページの場合
			if ( is_page() ) {

				/**********************************
				 * 先祖階層の情報を取得
				 */

				global $post;
				// 表示中のページの先祖階層情報を取得
				$ancestors = get_post_ancestors( $post->ID );
				// 先祖階層を取得しやすいように配列の中身を逆順にする
				$reversed_ancestors = array_reverse( $ancestors );

				$ancestor_page_name = '';
				// 先祖階層が存在する場合
				if ( ! empty( $reversed_ancestors[0] ) ) {
					// 先祖階層の投稿情報を取得
					$ancestor_post = get_post( $reversed_ancestors[0] );
					// メニューを差し替える先祖階層の固定ページの post_name(スラッグ)を指定
					if ( 'recruit' === $ancestor_post->post_name ) {
						$ancestor_page_name = 'recruit';
					}
				}

				/**********************************
				 * メニューの指定の差し替え
				 */

				 // 表示中の固定ページが採用情報階層の場合
				if ( is_page( 'recruit' ) || 'recruit' === $ancestor_page_name ) {
					// 差し替えるメニュー対象を指定
					$args['theme_location'] = 'global-nav-recruit';

				// 表示中の固定ページのスラッグが lp-001 の場合
				} elseif ( is_page( 'lp-001' ) ) {
					// 差し替えるメニュー対象を指定
					$args['theme_location'] = 'global-nav-lp-001';
				}
			}
		}
		return $args;
	}
);

先祖階層の取得方法はもう少しスマートな方法があるような気もしますので、ご指摘は @kurudrive でお待ちしております。

フルサイト編集のテーマだとこのあたりもノーコードでカスタマイズできるようになるので、そちらの準備もがんばります。

Follow me!

この記事を書いた人

石川栄和代表取締役
名古屋のウェブ制作会社数社に10年程度務めた後、株式会社ベクトル設立。
企画・運営・コンサルティング〜WordPressを中心としたシステム開発まで幅広く携わる。
[ 著書 ]
・いちばんやさしいWordPressの教本(共著)
・現場でかならず使われているWordPressデザインのメソッド(共著)
[ 最近のWordPressコミュニティでの活動 ]
2019 WordCampNiigata セッションスピーカー
2019 WordCampHaneda セッションスピーカー
2018 WordCampOsaka セッションスピーカー
2017 WordCampKyoto セッションスピーカー

リリース記念キャンペーン!
G3 Pro Unit を買って


Evergreen


無料でダウンロードしよう

Lightningで使えるおしゃれなデザインスキン / コンテンツデータを試せるチャンス!