Как создать меню на WordPress?

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

Прохожу курс по WordPress и столкнулся с проблемой, необходимо добавить меню на сайт
Объявил функцию регистрации областей меню:

function test_menus(){    $locations = array(     'header' => __('Header Menu', 'test'),     'footer' => __('Footer Menu', 'test')   );    register_nav_menus($locations); }  add_action( 'init','test_menus');

function test_menus(){ $locations = array( 'header' => __('Header Menu', 'test'), 'footer' => __('Footer Menu', 'test') ); register_nav_menus($locations); } add_action( 'init','test_menus');

После этого появился подпункт меню в админке WordPress, создал меню, дал название header-menu, и добавил странички:

Как создать меню на WordPress?

Затем в header.php написал функцию вывода меню:

<?php    wp_nav_menu( [   'theme_location'  => 'header-menu',   'container'       => false,   'menu_class'      => 'menu__list',   'menu_id'         => false,   'echo'            => true,   'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',   ] ); ?>

<?php wp_nav_menu( [ 'theme_location' => 'header-menu', 'container' => false, 'menu_class' => 'menu__list', 'menu_id' => false, 'echo' => true, 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', ] ); ?>

Но на сайте ничего не отображается, в html разметке тоже не появляется меню

Как создать меню на WordPress?

Однако когда я писал 'theme_location' => 'header-menu', меню отображалось, но все те параметры которые я указывал в wp_nav_menu работали не правильно, container не отключался, при том что значение выставлено false, так же menu_class присваивал класс не тегу ul, а контейнеру div, к тому же не работал фильтр для присваивания своих классов тегам li в списке ul

Как создать меню на WordPress?

Вот сайт: https://ce32527-wordpress-qrqjs.tw1.ru/

Дополнительные вопросы

Потому что у вас location header, а не header-menu

  • KingAnton, Здравствуйте, да, location header, но когда я пишу location header, меню вообще не отображается
  • Попробуйте так:
    add_action('after_setup_theme', 'test_setup'); function test_setup() { register_nav_menus( 		array( 			'menu-header' => esc_html__('Header menu', 'test'), 		) 	); }

    add_action('after_setup_theme', 'test_setup'); function test_setup() { register_nav_menus( array( 'menu-header' => esc_html__('Header menu', 'test'), ) ); }

  • leylin, а Вы попробуйте использовать уникальные локейшены.... не header и footer. яб не стал использовать. зачастую такие банальные(распространенные) слова при создании чего-либо создают конфликты с движком, либо иным... придумаете свою абривиатуру (приставку) как разраба и используйте ее везде как при создании функций так и классов и т.д.
  • KingAnton, Попробовал, меню отобразилось, однако меня смущает странное поведение параметров wp_nav_menu
    <?php    wp_nav_menu( [   'theme_location'  => 'menu-header',   'container'       => false,   'menu_class'      => 'menu__list',   'menu_id'         => false,   'echo'            => true,   'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',   ] ); ?>

    <?php wp_nav_menu( [ 'theme_location' => 'menu-header', 'container' => false, 'menu_class' => 'menu__list', 'menu_id' => false, 'echo' => true, 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', ] ); ?>

    При указании таких параметров контейнер не убирается, однако можно менять его тег, параметр 'menu_class' => 'menu__list' добавляет класс не к тегу ul, а к контейнеру, уже сколько времени бьюсь, никак не понимаю в чём дело...

  • Владимир Брумер, Хорошо, учту
  • Ответы на вопрос 0

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

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

    Заказать помощь
    Лучший ответ
    1
    Редакция по БД Ответ

    Вы уже правильно зарегистрировали области меню через register_nav_menus. Следующий шаг — вывести меню в шаблоне темы через wp_nav_menu(). Одного создания меню в админке недостаточно: тема должна вызвать нужную область в header/footer.

    Регистрация:

    add_action('after_setup_theme', function () {
        register_nav_menus([
            'header' => __('Header Menu', 'test'),
            'footer' => __('Footer Menu', 'test'),
        ]);
    });

    add_action('after_setup_theme', function () { register_nav_menus([ 'header' => __('Header Menu', 'test'), 'footer' => __('Footer Menu', 'test'), ]); });

    Вывод в header.php:

    wp_nav_menu([
        'theme_location' => 'header',
        'container'      => 'nav',
        'container_class' => 'site-header-nav',
        'menu_class'     => 'site-header-menu',
    ]);

    wp_nav_menu([ 'theme_location' => 'header', 'container' => 'nav', 'container_class' => 'site-header-nav', 'menu_class' => 'site-header-menu', ]);

    Вывод в footer.php:

    wp_nav_menu([
        'theme_location' => 'footer',
        'container'      => 'nav',
        'container_class' => 'site-footer-nav',
        'menu_class'     => 'site-footer-menu',
    ]);

    wp_nav_menu([ 'theme_location' => 'footer', 'container' => 'nav', 'container_class' => 'site-footer-nav', 'menu_class' => 'site-footer-menu', ]);

    В админке важно не только создать меню, но и назначить его в область. Откройте «Внешний вид → Меню → Управление областями» и выберите созданное меню для Header Menu.

    Если меню не выводится, проверьте:

    • код стоит в активной теме, а не в другой;
    • hook лучше after_setup_theme, а не init;
    • в шаблоне реально вызывается wp_nav_menu;
    • меню назначено в нужную область.

    Название меню в админке, например header-menu, не равно theme_location. В коде вывода нужно указывать именно зарегистрированную область: header.

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

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

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

    комментарий

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

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