Функция register_nav_menus()
в WordPress позволяет зарегистрировать несколько областей для размещения навигационных меню в теме. Эти области затем могут быть использованы для создания и вывода меню с помощью функции wp_nav_menu()
.
register_nav_menus( array $locations = array() )
Параметры
- $locations (массив) — Необязательный параметр. Ассоциативный массив, где ключи являются уникальными идентификаторами расположений меню (например, slug), а значения — их описаниями для админки.
Возвращаемое значение
- null — Функция ничего не возвращает.
Описание
Функция register_nav_menus()
регистрирует одно или несколько расположений для меню, которые затем можно назначать в админ-панели WordPress. Эта функция автоматически включает поддержку произвольных меню для темы, поэтому вызов add_theme_support('menus')
не требуется. После регистрации, эти области будут видны в разделе «Внешний вид» → «Меню» в админке WordPress, где администратор может создать меню и привязать его к определённому месту на сайте (например, к шапке или подвалу).
Пример 1: Регистрация нескольких областей меню
В следующем примере мы регистрируем две области для меню: одно для шапки сайта и одно для подвала.
<?php
add_action( 'after_setup_theme', function() {
register_nav_menus( [
'header_menu' => __( 'Меню в шапке', 'your-theme-textdomain' ),
'footer_menu' => __( 'Меню в подвале', 'your-theme-textdomain' ),
] );
} );
Этот код добавляет два новых расположения меню — «Меню в шапке» и «Меню в подвале». После этого в шаблоне вы можете вывести меню с помощью функции wp_nav_menu()
.
Пример 2: Вывод меню в шаблоне
После того как вы зарегистрировали области для меню, их можно вывести в соответствующих местах в шаблоне темы. Например:
<?php
// Вывод меню в шапке
if ( has_nav_menu( 'header_menu' ) ) {
wp_nav_menu( array(
'theme_location' => 'header_menu',
'container' => 'nav',
'container_class' => 'header-nav',
) );
}
// Вывод меню в подвале
if ( has_nav_menu( 'footer_menu' ) ) {
wp_nav_menu( array(
'theme_location' => 'footer_menu',
'container' => 'nav',
'container_class' => 'footer-nav',
) );
}
Пример 3: Регистрация меню внутри плагина
Если вы хотите зарегистрировать меню для плагина, это делается аналогично. Допустим, у вас есть плагин с названием my-plugin.php
, и вам нужно зарегистрировать две области для меню: основное меню и меню в футере.
<?php
if ( ! function_exists( 'mytheme_register_nav_menu' ) ) {
function mytheme_register_nav_menu() {
register_nav_menus( array(
'primary_menu' => __( 'Primary Menu', 'text_domain' ),
'footer_menu' => __( 'Footer Menu', 'text_domain' ),
) );
}
add_action( 'after_setup_theme', 'mytheme_register_nav_menu', 0 );
}
Дополнительная информация
- Для регистрации одного меню можно использовать функцию
register_nav_menu()
. - Используйте функцию
get_registered_nav_menus()
для получения списка всех зарегистрированных областей меню в теме.
Изменение slug меню
Если вы измените slug (идентификатор) ранее зарегистрированного меню, оно пропадёт с фронтенда. Чтобы переназначить меню на новую область, можно использовать следующий код:
function genius_update_menu_location() {
$nav_menu_locations = get_theme_mod('nav_menu_locations');
if (isset($nav_menu_locations['old-slug'])) {
if (!isset($nav_menu_locations['new-slug']) || $nav_menu_locations['new-slug'] === 0) {
$nav_menu_locations['new-slug'] = $nav_menu_locations['old-slug'];
unset($nav_menu_locations['old-slug']);
set_theme_mod('nav_menu_locations', $nav_menu_locations);
}
}
}
add_action('after_setup_theme', 'genius_update_menu_location');
Заключение
Функция register_nav_menus()
— это мощный инструмент для регистрации нескольких областей меню в теме. Она предоставляет удобный способ для создания произвольных меню и их привязки к разным частям сайта через админ-панель WordPress, что упрощает работу с навигацией для разработчиков и администраторов сайта.