Получение местоположений навигационных меню в WordPress
Функция get_nav_menu_locations()
была добавлена в WordPress версии 3.0.0. Она позволяет разработчикам получить информацию о зарегистрированных местоположениях для навигационных меню.
Как работает функция
Функция использует другую функцию так называемую get_theme_mod()
, чтобы извлечь данные о навигационных меню. Каждый зарегис��рированный элемент меню получает уникальный идентификатор, который связан с его местоположением. Если местоположения не зарегистрированы, функция вернёт пустой массив.
Возвращаемое значение
Функция возвращает ассоциативный массив (ключ-значение), где ключом является имя местоположения меню, а значением — его идентификатор.
get_nav_menu_locations();
Примеры использования
Пример 1: Получение идентификатора меню, привязанного к заданному местоположению
Сначала необходимо зарегистрировать местоположение меню с помощью функции register_nav_menu()
. Например, если вы зарегистрировали местоположение с меткой my_location
, а затем создали меню в админке и привязали его к этому местоположению, то код будет выглядеть так:
$locs = get_nav_menu_locations();
print_r( $locs );
Вывод:
Array
(
[toolbar] => 694
)
Пример 2: Разрешение роли 'редактор' изменять меню
Этот код позволит пользователю с ролью 'редактор' редактировать меню на сайте:
add_action( 'admin_menu', 'allow_menu_editor', 99 );
function allow_menu_editor() {
$arr_menu = array_filter( get_nav_menu_locations() );
if( ! empty( $arr_menu ) ){
$obj_role = get_role( 'editor' );
$obj_role->add_cap( 'edit_theme_options' );
}
}
Пример 3: Получение названия меню по его ID (slug)
Вы можете вывести название меню с определённым ID таким образом:
$menu_name = 'menu1';
echo sprintf( '%s
', get_nav_menu_title( $menu_name ) ?: __( 'Введите меню', 'textdomain' ) );
wp_nav_menu( [
'theme_location' => $menu_name,
'container' => '',
] );
function get_nav_menu_title( $menu_name ) {
$loc = get_nav_menu_locations( $menu_name )[ $menu_name ] ?? null;
if( ! $loc ){
return '';
}
return wp_get_nav_menu_object( $loc )->name;
}
Изменения в версии
- С версии 3.0.0: функция была введена.
Код функции
Вот как выглядит код функции get_nav_menu_locations()
:
function get_nav_menu_locations() {
$locations = get_theme_mod( 'nav_menu_locations' );
return ( is_array( $locations ) ) ? $locations : array();
}
Связанные функции
В WordPress есть множество связанных функций, которые могут быть полезны при работе с навигационными меню:
has_nav_menu()
is_nav_menu()
register_nav_menu()
wp_nav_menu()
Эти функции помогут вам лучше управлять меню и их местоположениями в вашей теме.