Как зарегистрировать и вывести меню в теме WordPress
← Блог
WordPress · 14.11.2024 · 3 мин чтения

Как зарегистрировать и вывести меню в теме WordPress

Инструкция для классической PHP-темы WordPress: зарегистрируем позиции меню, назначим им меню в админке и выведем их через wp_nav_menu(). В блочной теме навигация настраивается через блок «Навигация».

1. Регистрация меню в functions.php:

Сначала нужно зарегистрировать меню, чтобы его можно было использовать в теме. Для этого в файле functions.php добавь следующий код:

function mytheme_register_menus() {
	    register_nav_menus(
	        array(
	            'header-menu' => __( 'Header Menu' ),
	            'footer-menu' => __( 'Footer Menu' )
	        )
	    );
	}
	
add_action( 'after_setup_theme', 'mytheme_register_menus' );

Код регистрирует две позиции: header-menu и footer-menu. Названия позиций должны совпадать со значениями theme_location при выводе меню.

2. Добавление меню в админке WordPress:

После регистрации меню ты сможешь создать меню через админ-панель WordPress, перейдя в раздел Внешний вид > Меню. Здесь можно создать новое меню и привязать его к зарегистрированным позициям, таким как Header Menu или Footer Menu. Добавь ссылки и сохрани меню.

Назначение меню позициям темы в админке WordPress

Чтобы вывести меню на сайте, открой нужный шаблон (например, header.php или footer.php) и добавь следующий код:

<?php
	wp_nav_menu( array(
	    'theme_location' => 'header-menu', // Или 'footer-menu', если выводим меню в подвале
	    'container'      => 'nav',         // Контейнер для меню (например, <nav>)
	    'container_aria_label' => 'Основная навигация',
	    'fallback_cb'    => false,         // Не выводить список страниц вместо неназначенного меню
	    'container_class'=> 'main-menu',   // Класс контейнера (если нужно)
	    'menu_class'     => 'menu-list',   // Класс для <ul> меню
	) );
?>

Основные аргументы wp_nav_menu:

wp_nav_menu( array(
    'theme_location'  => 'header-menu',            // (string) Расположение меню, зарегистрированное с помощью register_nav_menus(). Пример: 'header-menu'.
    'menu'            => '',            // (string) Название меню или объект WP_Term. Пример: 'Главное меню'.
    'container'       => 'div',         // (string|false) HTML-контейнер для меню. По умолчанию 'div'. Установите в false, чтобы отключить контейнер.
    'container_class' => '',            // (string) Класс контейнера меню. Пример: 'menu-container'.
    'container_aria_label' => 'Основная навигация', // Название навигации, когда container = nav.
    'container_id'    => '',            // (string) ID контейнера меню. Пример: 'main-menu-container'.
    'menu_class'      => 'menu',        // (string) Класс ul-списка меню. Пример: 'menu'.
    'menu_id'         => '',            // (string) ID ul-списка меню. Пример: 'main-menu'.
    'echo'            => true,          // (bool) Выводить (true) или возвращать (false). По умолчанию true.
    'fallback_cb'     => 'wp_page_menu',// (callback|false) Функция обратного вызова для меню по умолчанию. Установите в false, чтобы отключить.
    'before'          => '',            // (string) Текст перед ссылками меню. Пример: '<span>'.
    'after'           => '',            // (string) Текст после ссылок меню. Пример: '</span>'.
    'link_before'     => '',            // (string) Текст перед анкором каждой ссылки. Пример: '<span>'.
    'link_after'      => '',            // (string) Текст после анкора каждой ссылки. Пример: '</span>'.
    'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>', // (string) Формат обертки элементов меню. По умолчанию '<ul id="%1$s" class="%2$s">%3$s</ul>'.
    'item_spacing'    => 'preserve',    // (string) Как обрабатывать пробелы в HTML-коде. 'preserve' или 'discard'.
    'depth'           => 0,             // (int) Максимальная глубина вложенных уровней. 0 - неограниченно.
    'walker'          => '',            // (object) Кастомный объект Walker для создания меню.
) );

4. Если меню не отображается:

Если меню не появилось, проверь совпадение theme_location, назначение позиции в админке и наличие пунктов. В коротком примере fallback_cb отключён: без назначенного меню ничего не выводится. По умолчанию WordPress может вывести список страниц через wp_page_menu().

Для меню в подвале укажи footer-menu, подходящий container_aria_label и класс контейнера footer-menu. Далее можно добавить классы пунктам и ссылкам. Отдельные ссылки в шаблоне разобраны в статье про URL WordPress.

Документация

Есть вопрос или дополнение?

Обсудить в Telegram

Добавить комментарий