2016-09-11 2 views
0

Я добавил свое вторичное меню в свой файл functions.php, и WordPress также разрешил мне выбрать дополнительное меню. Проблема заключается в том, что одновременно отображается строка меню, поэтому у меня есть двойная панель меню в верхней части моей домашней страницы, а также моя страница о нас. То, что я пытаюсь сделать, это показать мою основную панель меню только на моей главной домашней странице и показать вторичное меню на моей странице о нас, странице услуг и т. Д. Как я могу это исправить?Как показать вторичное меню Wordpress только на определенной странице?

function.php файл

register_nav_menus(array(
     'primary' => esc_html__('Primary', 'themename'), 
     'secondary' => __('Secondary Menu', 'themename'), 
    )); 

header.php файл

<?php if (has_nav_menu('primary') 

     'theme_location' => 'secondary', 
     'container'   => 'nav', 
     'container_class' => 'navbar navbar-default', 
     'menu_class'  => 'nav navbar-nav navbar-right' 
; ?> 
     <?php 
    if (has_nav_menu('secondary_navigation_menu')) { 
     wp_nav_menu(array('theme_location' => 'secondary_navigation_menu')); 
    } ?> 

     <?php if (is_home()): ?> 
<?php if (has_nav_menu('primary') : ?> 
    //primary menu 
<?php endif; ?> 
<?php endif; ?> 

P.S. Оба моего меню имеют разные CSS.

Ваша помощь будет оценена!

+1

Возможный дубликат [Отобразить меню Wordpress на конкретных страницах] (http://stackoverflow.com/questions/39419166/display-wordpress-menu-on-specific-pages) –

+0

@PrafullaKumarSahu Хм, я думаю, это очень похоже, но я не получаю ответа. Вы можете это объяснить? – R3y

+0

Я добавил свой ответ, если вы не получили его, пожалуйста, задайте вопрос. –

ответ

0

Используйте встроенные условное Wordpress обеспечивает:

Если вы установили вашу домашнюю страницу, чтобы отобразить свои последние сообщения, то вы должны использовать is_home() , если вы установили домашнюю страницу в качестве первой страницы через Reading > Settings > Front page displays, тогда вы должны использовать is_front_page().

Оберните эти функции меню в условном заявлении, применимом к вашему делу.

Вы также можете комбинировать их:

<?php 
    if (!(is_front_page() || is_home())) { 
     wp_nav_menu(array( 
     'theme_location' => 'secondary', 
     'container'   => 'nav', 
     'container_class' => 'navbar navbar-default', 
     'menu_class'  => 'nav navbar-nav navbar-right' 
     )); 
    } 

?> 

выше условный оператор вернет true если страница идет не на главной странице или на первой странице.

Вы также можете использовать условный тег is_page() для проверки любой другой страницы.

Эта функция позволяет передать дополнительный параметр в его круглых скобках нацеливания на определенную страницу или несколько страниц с помощью (интермедиат | строка | массив) Идентификатор страницы, название , slug или массив.

+0

Добавьте также для нашей страницы, он хочет вторичное меню как для домашней страницы, так и для нашей страницы. –

+0

Не похоже на это: «... Я пытаюсь показать свою основную панель меню только на моей главной домашней странице и показать вторичное меню на моей странице о нас, странице услуг и т. Д.» – UncaughtTypeError

+0

@UncaughtTypeError Он показал ошибку на моем localhost, но я пробовал этот код – R3y

0

Вы можете вызвать вторичное меню на странице, которую вы желаете в одиночку. С помощью is_page() вы можете отображать меню, где захотите.

// Когда отображается какая-либо одна страница.

is_page(); 

// Когда отображается страница (ID).

is_page(42); 

// Когда отображается страница с сообщением post_title «Контакт».

is_page('Contact'); 

// Когда отображается страница с сообщением post_name (slug) «about-me».

is_page('about-me'); 

Для примера, если вы собираетесь отобразить вспомогательное меню во всех страницах, кроме home страницы вы можете иметь такой код.

<?php 
if (!is_home()) 
{ 
    // Here you can display the Secondary menu 
    if (has_nav_menu('secondary-menu')) { /* if menu location 'secondary-menu' exists then use custom menu */ 
    wp_nav_menu(array('theme_location' => 'secondary-menu')); 
}  
else 
{ 
    // here you can display the primary menu. 
    if (has_nav_menu('primary-menu')) { /* if menu location 'primary-menu' exists then use custom menu */ 
    wp_nav_menu(array('theme_location' => 'primary-menu')); 
}  
?> 

Теперь основное меню будет отображаться только на странице со мной.

is_page() поддерживает массив тоже:

if(is_page(array('about-us', 'contact', 'management')) 
    //either in about us, or contact, or management page is in view 
else 
    //none of the page about us, contact or management is in view 

Замените ваш header.php, как я ниже.

Ваш Header.php необходимо изменить следующим образом. Вы пишете все остальные коды для регистрации меню, а другие в файле functions.php не смешивают его здесь в файле header.php.

<?php 
     if(is_home() || is_front_page()) // This ensures that the below part execute for home page or front page alone 
     { 
       if (has_nav_menu('primary-menu')) { 
       /* if menu location 'primary-menu' exists then use custom menu */ 
       wp_nav_menu(array('theme_location' => 'primary-menu')); 
       }  
     } 
     else 
     { 
       if (has_nav_menu('secondary_navigation_menu')) { 
       wp_nav_menu(array('theme_location' => 'secondary_navigation_menu')); 
       } 
     } 
?> 
+0

Как скомбинировать весь этот код? Можете ли вы немного показать мне подробности? – R3y

+0

Вам нужно показать вторичное меню, а не домашнюю страницу ах. –

+0

@ NareshKumar.P сколько страниц он может добавить как '' 'if (is_page (array ('about-us', 'contact', 'management')) '' 'лучше будет использовать' '' if (! is_home()) '' вместо. –

0

Если вы пройдете через заголовок.php, должно быть что-то вроде этого.

if (has_nav_menu('primary') : ?> 

Теперь в вашем functions.php зарегистрировать другое расположение меню

register_nav_menus(array(
    'secondary_menu' => 'Secondary Navigation Menu', 
    'secondary_navigation_menu' => 'My Custom Footer Menu', 
)); 

и после if (has_nav_menu('primary') : ?> секции должен быть код для отображения меню что-то вроде

wp_nav_menu(array( 
     'theme_location' => 'secondary', 
     'container'   => 'nav',....... 

после этого добавить

<?php 
    if (has_nav_menu('secondary_navigation_menu')) { 
     wp_nav_menu(array('theme_location' => 'secondary_navigation_menu')); 
    } ?> 

теперь для отображения начального меню только в домашней страницы оберточной is_home(), как

<?php if (is_home()): ?> 
<?php if (has_nav_menu('primary') : ?> 
    //primary menu 
<?php endif; ?> 
<?php endif; ?> 

, если вы хотите, чтобы основное меню не появится на домашней странице сделать как

<?php if (! is_home()): ?> 
    <?php if (has_nav_menu('secondary_navigation_menu') : ?> 
     //secondarymenu 
    <?php endif; ?> 
    <?php endif; ?> 
+0

@ R3y Я добавил страницы functions.php и header.php. вам нужно создать дочернюю тему и переопределить header.php и добавить некоторый код в functions.php, как я уже говорил –

+0

(Извините за так много вопросов здесь, как я все еще новичок) Итак, мой последний код должен быть как? – R3y

+0

@ R3y в вашем файле functions.php добавить '' 'register_nav_menus''' и код останова принадлежит header.php. –

Смежные вопросы