Как создать меню на WordPress?
Прохожу курс по 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, и добавил странички:
Затем в 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 разметке тоже не появляется меню
Однако когда я писал 'theme_location' => 'header-menu', меню отображалось, но все те параметры которые я указывал в wp_nav_menu работали не правильно, container не отключался, при том что значение выставлено false, так же menu_class присваивал класс не тегу ul, а контейнеру div, к тому же не работал фильтр для присваивания своих классов тегам li в списке ul
Вот сайт: https://ce32527-wordpress-qrqjs.tw1.ru/
Дополнительные вопросы
Потому что у вас location header, а не header-menu
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'), ) ); }
<?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
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос



Вы уже правильно зарегистрировали области меню через
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'), ]); });
Вывод в
header.php: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', ]);
В админке важно не только создать меню, но и назначить его в область. Откройте «Внешний вид → Меню → Управление областями» и выберите созданное меню для
Header Menu.Если меню не выводится, проверьте:
after_setup_theme, а неinit;wp_nav_menu;Название меню в админке, например
header-menu, не равноtheme_location. В коде вывода нужно указывать именно зарегистрированную область:header.