get_nav_menu_locations()
Получает массив зарегистрированных областей меню (расположений меню) и ID меню прикрепленных к каждой области.
Область меню регистрируются с помощью функции register_nav_menu(). Затем в админке создается меню и прикрепляется к имеющейся области.
Работает на основе: get_theme_mod()
Основа для: has_nav_menu()
1 раз — 0.000063 сек (очень быстро) | 50000 раз — 1 сек (очень быстро)
Хуков нет.
Возвращает
int[]. Массив вида: 'ярлык_области_меню' => id меню:
Array ( [location] => 694 [location2] => 796 )
Использование
$locations = get_nav_menu_locations();
Примеры
#1 Получим ID меню которое прикреплено к указанной области
Мы зарегистрировали расположение меню с помощью register_nav_menu(). Расположение имеет ярлык my_location. Затем мы создали меню в админке и прикрепили его к этому расположению. Тогда след. код сработает так:
$locs = get_nav_menu_locations(); print_r( $locs ); /* Выведет: Array ( [toolbar] => 694 ) */
#2 Получим заголовок навигационного меню по его id (slug)
$menu_name = 'menu1';
echo sprintf( '<h3>%s</h3>', get_nav_menu_title( $menu_name ) ?: __( 'Вставьте меню', 'textdomain' ) );
wp_nav_menu( [
'theme_location' => $menu_name,
'container' => '',
] );
$menu_name = 'menu2';
echo sprintf( '<h3>%s</h3>', 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 Разрешим роли 'editor' изменять меню
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.0.0 | Введена. |
Код get_nav_menu_locations() get nav menu locations WP 6.9
function get_nav_menu_locations() {
$locations = get_theme_mod( 'nav_menu_locations' );
return ( is_array( $locations ) ) ? $locations : array();
}