同じサイト内で別のナビゲーションメニューを使いたい・・。「Lightningテーマ」を提供されてる株式会社ベクトルでの紹介を参考にして3つ以上のメニュー出しわけも可能なように参考コードをメモしておきます。(Lightning以外のテーマで使用時する際は、フック名を確認してから記載することを忘れずに。)
機能実装の手順
functions.phpに以下コードを貼り付けちゃいます。
コードを見たらわかるように、出し分けしたい固定ページのスラッグを記載する必要があるようなので、先に決めておきましょう。
今回は以下の3ページを想定してるコードです。
- recruit
- lp-001
- lp-002
functions.php
// ナビゲーションメニューの出し分け_下階層用のメニューを追加
add_action(
'after_setup_theme',
function() {
// 採用情報用のナビゲーションを登録
register_nav_menus( array( 'global-nav-recruit' => 'Header Navigation Recruit' ) );
// ランディングページ1用のナビゲーションを登録
register_nav_menus( array( 'global-nav-lp-001' => 'Header Navigation LP-001' ) );
// ランディングページ2用のナビゲーションを登録
register_nav_menus( array( 'global-nav-lp-002' => 'Header Navigation LP-002' ) );
}
);
// ナビゲーションメニューの出し分け_下階層用のメニューの差し替え処理
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';
// 表示中の固定ページのスラッグが lp-002 の場合
} elseif ( is_page( 'lp-002' ) ) {
// 差し替えるメニュー対象を指定
$args['theme_location'] = 'global-nav-lp-002';
}
}
}
return $args;
}
);保存して、確認してみましょう。
実装完了!
管理画面のメニュー設定ページに無事に出現しました!!おめでとう!


