Создал два меню для футера и хедера, как вывести их?

Ссылка скопирована
1 ответ

Добрый день, создал два меню для шапки и футера:

add_action('init', 'theme_register_nav_menu'); function theme_register_nav_menu() {     register_nav_menus(         array(             'header-primary'    => __('Header menu'),             'footer-primary'    => __('Footer menu')         )     ); }

add_action('init', 'theme_register_nav_menu'); function theme_register_nav_menu() { register_nav_menus( array( 'header-primary' => __('Header menu'), 'footer-primary' => __('Footer menu') ) ); }

Пытаюсь вывести одно в хедере другое в футере такими командами:
Футер

<?php wp_nav_menu(array('menu' => 'footer-primary')); ?>

<?php wp_nav_menu(array('menu' => 'footer-primary')); ?>

Хедер

<?php wp_nav_menu(array('menu' => 'header-primary')); ?>

<?php wp_nav_menu(array('menu' => 'header-primary')); ?>

Но и там и там выводится самое footer меню ( скорее всего выводится просто последнее созданное меню, а именно футер ). Может кто-то знает решение проблемы

Дополнительно

так а само меню вы создали привязяв к этим областям то?

  • Антон Литвиненко, да в аминке Wordpress
  • bazliiii @bazliiii Автор вопроса В общем нужно было не header-primary, а название

    <?php wp_nav_menu(array('menu' => 'header menu')); ?>

    <?php wp_nav_menu(array('menu' => 'header menu')); ?>

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Дмитрий К. Ответ

    Проблема в параметре, который передается в wp_nav_menu. При регистрации через register_nav_menus вы создаете не сами меню, а области меню темы. Ключи header-primary и footer-primary являются theme location, то есть местами вывода. Параметр menu работает иначе: он ищет конкретное меню по ID, slug или названию, которое создано в админке. Поэтому когда в menu передают ключ области, WordPress может подобрать не то меню или отработать fallback, и в результате в шапке и футере появляется один и тот же набор пунктов.

    Правильная схема такая: сначала регистрируете две области меню, затем в админке создаете два меню и назначаете каждое меню в свою область, а в шаблонах выводите их через theme_location. Регистрировать меню лучше на after_setup_theme, потому что это этап настройки темы.

    add_action('after_setup_theme', function () {
        register_nav_menus([
            'header-primary' => __('Header menu', 'theme'),
            'footer-primary' => __('Footer menu', 'theme'),
        ]);
    });

    add_action('after_setup_theme', function () { register_nav_menus([ 'header-primary' => __('Header menu', 'theme'), 'footer-primary' => __('Footer menu', 'theme'), ]); });

    В header.php выводите область шапки:

    <?php
    wp_nav_menu([
        'theme_location' => 'header-primary',
        'container' => 'nav',
        'container_class' => 'header-nav',
        'fallback_cb' => false,
    ]);
    ?>

    <?php wp_nav_menu([ 'theme_location' => 'header-primary', 'container' => 'nav', 'container_class' => 'header-nav', 'fallback_cb' => false, ]); ?>

    В footer.php выводите область футера:

    <?php
    wp_nav_menu([
        'theme_location' => 'footer-primary',
        'container' => 'nav',
        'container_class' => 'footer-nav',
        'fallback_cb' => false,
    ]);
    ?>

    <?php wp_nav_menu([ 'theme_location' => 'footer-primary', 'container' => 'nav', 'container_class' => 'footer-nav', 'fallback_cb' => false, ]); ?>

    После этого зайдите в админке в раздел меню и проверьте назначения: меню для шапки должно быть привязано к Header menu, меню для футера к Footer menu. Если используете классический интерфейс, это делается во Внешний вид, Меню, Управление областями. Если тема блочная, назначение может быть внутри редактора сайта и блока Navigation, но смысл тот же: у каждой области должен быть свой выбранный набор пунктов.

    • menu используйте только когда хотите вывести конкретное меню по его реальному названию, например Header menu.
    • theme_location используйте для вывода зарегистрированной области темы, например header-primary.
    • fallback_cb лучше поставить false, чтобы WordPress не подставлял случайный список страниц или первое найденное меню, если область не назначена.

    В вашем случае рабочее решение именно theme_location. Вариант с menu и названием меню тоже может сработать, но он менее удобен для темы: если администратор переименует меню, шаблон может перестать выводить нужный набор пунктов. Привязка через область стабильнее, потому что код зависит от технического ключа области, а не от пользовательского названия меню.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно