Kachimov
@Kachimov
медиа продакшн

Как в wordpress создать два nav меню, каждое для отдельной страницы?

Есть две страницы, скажем Лендинг и Блог. На каждой странице свое верхнее меню, для Лендинга свое, для Блога свое.
d2eeb09ecd394e46927e040793a2b26a.jpg5d53632411e947cebf31112d86029d95.jpg
Я создал в wordpress два меню для каждой страницы.

Подозреваю, что в functions.php нужно каким либо образом проверить, какое меню должно загружаться.

Например первое меню я создал вот так:
function register_theme_menus() {
	register_nav_menus(
		array(
			'header-menu'	=> __('Header Menu')
		)
	);
}
add_action('init', 'register_theme_menus');

Таким же образом могу создать и второе. Но вот дальше то как:
if (page-landing.php)
  Header Menu
else
  Blog Menu


UPD:
Готовый код
// functions.php
<?php
function register_theme_menus() {
	register_nav_menus(
		array(
			'landing-menu'	=> __('Landing Menu'),
			'blog-menu'	=> __('Blog Menu')
		)
	);
}
add_action('init', 'register_theme_menus');
?>
// header.php
<?php
        if ( is_page( 'имя страницы' ) ) {
            wp_nav_menu( array( 
              'menu'        => 'landing-menu',
              'menu_class'  => 'nav navbar-nav',
              'container'   => 'false',
            ) );
        } else {
            wp_nav_menu( array( 
              'menu'        => 'blog-menu',
              'menu_class'  => 'nav navbar-nav',
              'container'   => 'false',
            ) );
        }
?>
  • Вопрос задан
  • 8464 просмотра
Решения вопроса 1
А дальше еще проще. Функция wp_nav_menu выводит Ваше меню там где Вам необходимо. В итоге Ваш псевдокод будет какой-то такой
if (page-landing.php)
  wp_nav_menu( array('menu' => 'Header Menu' ));
else
  wp_nav_menu( array('menu' => 'Blog Menu' ));


На самом деле кроме названия меню можно указывать кучу разных параметров, почитайте по ссылке выше.

И да, как Вы верно подозревали надо сделать
register_nav_menus(
		array(
			'header-menu'	=> __('Header Menu'),
			'blog-menu'	=> __('Blog Menu')
		)
	);


После чего наполнение этих двух меню можно вести из админки, формируя каждое по отдельности, и выводить на нужную страницу, как было описано чуть выше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vitz84
Спасибо! очень выручил!
Но вот возник вопрос.
у меня конструкция чуток наоборот, надо показывать на всем сайте кроме трех страниц другое меню

if
( is_page( 'страница1' ) ) {
wp_nav_menu( array('theme_location' => 'меню1' ) );
}
else {
wp_nav_menu( array('theme_location' => 'primary-nav') );
}

а вот как мне в is_page помимо страница1 добавить еще несколько страниц? Как это правильно должен выглядеть код?
Буду очень признателен за помощь!
Ответ написан
Комментировать
@awstudio
//register the custom menus
function register_my_menus() {
register_nav_menus(
array(
'landing1-menu' => __( 'Landing 1 Menu' )
'landing2-menu' => __( 'Landing 2 Menu' )
'landing3-menu' => __( 'Landing 3 Menu' )
)
);
}
add_action( 'init', 'register_my_menus' );


и задать в шаблоне

<?php
if (is_page('landing1-id')){
wp_nav_menu(array('menu'=>'landing1-menu' ));
} elseif (is_page('landing2-id')) {
wp_nav_menu(array('menu'=>'landing2-menu' ));
} elseif (is_page('landing3-id')) {
wp_nav_menu(array('menu'=>'landing3-menu' ));
} else {
// здесь обычное меню
}
?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы