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

Как заставить Polylang переводить два меню на Wordpress?

Создано два меню и без полиланга работают отлично.
functions.php
// Включаем поддержку меню
add_theme_support( 'menus' );
// Создаем меню
function register_theme_menus() {
	register_nav_menus(
		array(
			'landing-menu'	=> __('Landing Menu'),
			'blog-menu'		=> __('Blog Menu')
		)
	);
}
add_action('init', 'register_theme_menus');

header.php выбираем когда какое меню загружается.
if ( is_page( 'landing' ) ) {
            wp_nav_menu( array( 
              'menu'        => 'landing',
              'menu_class'  => 'nav navbar-nav darka',
              'container'   => 'false',
            ) );
} else {
            wp_nav_menu( array( 
              'menu'        => 'blog',
              'menu_class'  => 'nav navbar-nav darka',
              'container'   => 'false',
            ) );
}

Полиланг при этом ведет себя как попало. Alexander Sydorenko нашел вот это, где самые важные строки это:
wp_nav_menu(array('theme_location' => 'primary')); is OK
wp_nav_menu(array('menu' => 'nav menu')); is not OK

А вот по этой ссылочке дано вроде объяснение, но как-то я недопонял, как же мне ситуацию в моем случае подправить... То есть имеется ввиду, что мне надо создать в functions.php одно Primary меню, в котором уже будут лежать мои несколько wp_nav_menu? Очень мало инфы, на форуме плагина без ответа подобные вопросы нашел, а вот решения не вижу.

UPD: Такая структура тоже ничего не дала.
if ( is_page('Лендинг') ) {
    wp_nav_menu( array(
      'theme_location' => 'landing-menu', 
      'menu'        => 'landing',
      'menu_class'  => 'nav navbar-nav darka',
      'container'   => 'false',
    ) );
} elseif ( is_page('Land') ) {
    wp_nav_menu( array( 
      'theme_location' => 'landing-menu',
      'menu'        => 'landing_en',
      'menu_class'  => 'nav navbar-nav darka',
      'container'   => 'false',
    ) );
} elseif ( is_page('Блог') ) {
    wp_nav_menu( array( 
      'theme_location' => 'blog-menu',
      'menu'        => 'blog',
      'menu_class'  => 'nav navbar-nav darka',
      'container'   => 'false',
    ) );
} elseif ( is_page('Blog')) {
    wp_nav_menu( array( 
      'theme_location' => 'blog-menu',
      'menu'        => 'blog_en',
      'menu_class'  => 'nav navbar-nav darka',
      'container'   => 'false',
    ) );
}
  • Вопрос задан
  • 4927 просмотров
Решения вопроса 1
Kachimov
@Kachimov Автор вопроса
медиа продакшн
Писал на форум разработчика плагина, здесь, на stackoverflow - подобных вопросов куча, а вот ответов ноль. Копался неделю, в итоге методом тыка сделал.

functions.php
// Включаем поддержку меню
add_theme_support( 'menus' );
// Создаем меню
function register_theme_menus() {
	register_nav_menus(
		array(
			'primary'	=> __('Primary Menu', 'имявашейтемы'),
      'second' => __('Second Menu', 'имявашейтемы')
		)
	);
}
add_action('init', 'register_theme_menus');

header.php
// Создаем условие, 
// если у нас 'главная страница', то загружаем меню 'primary'
if (is_front_page()) {
  wp_nav_menu( array(
      'theme_location'        => 'primary',
      'menu_class'  => 'nav navbar-nav darka', #это стандартные стили bootstrap 3
      'container'   => 'false',
    ) );
} 
// в любом другом случае грузим меню 'second'   
else {
  wp_nav_menu( array(
    'theme_location'        => 'second',
    'menu_class'  => 'nav navbar-nav darka', #это стандартные стили bootstrap 3
    'container'   => 'false',
  ) );   
}

Осталось правильно настроить меню в адмике WordPress, думаю с этим проблем уже не возникнет. Вот и всё. У нас получилось четыре работающих меню [меню на главной - рус], [меню на главной - англ], [меню блога - рус], [меню блога - англ].

P.S. Для этого проекта мне это не нужно, но очень интересно как сделать эту структуру с тремя меню, пробовал это в самом начале, не получилось, отказался от такой страктуры, но задачка интересная - может как нибудь покапаюсь :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы