Функция get_nav_menu_locations()
в WordPress используется для получения всех зарегистрированных областей меню (navigation menu locations) и меню, прикрепленных к этим областям. Она возвращает ассоциативный массив, где ключами являются ярлыки зарегистрированных областей, а значениями — ID меню, прикрепленных к каждой из этих областей. Если к области не прикреплено меню, функция возвращает значение 0
для этой области.
get_nav_menu_locations(): int[]
Возвращаемое значение:
Ассоциативный массив, где ключи — это ярлыки областей меню, а значения — ID меню. Если меню не прикреплено к какой-либо области, функция вернёт значение 0
.
Пример 1: Получение ID меню для конкретной области
Предположим, что у вас есть область меню с ярлыком my_custom_location
. В админке WordPress вы создали меню и прикрепили его к этой области. Вот как можно получить ID этого меню:
$locations = get_nav_menu_locations();
if ( isset( $locations['my_custom_location'] ) ) {
$menu_id = $locations['my_custom_location'];
echo 'ID меню для области "my_custom_location": ' . $menu_id;
} else {
echo 'Меню не прикреплено к этой области.';
}
Пример 2: Получение имени меню для вывода
Допустим, у вас есть несколько областей меню, таких как header_menu
и footer_menu
. Вы хотите вывести имя меню, прикреплённого к каждой области:
$locations = get_nav_menu_locations();
$menu_name = 'header_menu';
if ( isset( $locations[$menu_name] ) ) {
$menu = wp_get_nav_menu_object( $locations[$menu_name] );
echo $menu->name ? $menu->name : __( 'Меню не прикреплено', 'textdomain' );
} else {
echo __( 'Область не найдена', 'textdomain' );
}
Пример 3: Автоматическое добавление возможности редактирования меню для редакторов
Иногда требуется дать роль «редактор» доступ к редактированию меню. Для этого можно добавить следующую функцию:
function allow_menu_editor() {
$locations = array_filter( get_nav_menu_locations() );
if ( ! empty( $locations ) ) {
$editor_role = get_role( 'editor' );
if ( $editor_role ) {
$editor_role->add_cap( 'edit_theme_options' );
}
}
}
add_action( 'admin_menu', 'allow_menu_editor', 999 );
Эта функция проверяет, есть ли зарегистрированные области меню, и если они существуют, добавляет возможность редактировать настройки темы для пользователей с ролью редактора.
Пример 4: Вывод нескольких меню
Если вы хотите вывести несколько меню на сайте, например, одно для шапки и одно для подвала, можно использовать следующий код:
$menu_name = 'header_menu';
wp_nav_menu( array(
'theme_location' => $menu_name,
'container' => '',
) );
$menu_name = 'footer_menu';
wp_nav_menu( array(
'theme_location' => $menu_name,
'container' => '',
) );
Этот код выведет меню, прикреплённые к областям header_menu
и footer_menu
, если они зарегистрированы и к ним прикреплены меню в админке.
Пример 5: Вывод всех зарегистрированных областей меню
Чтобы получить и вывести все зарегистрированные области меню и их прикреплённые меню, можно использовать следующий код:
$locations = get_nav_menu_locations();
foreach ( $locations as $location => $menu_id ) {
if ( $menu_id ) {
$menu = wp_get_nav_menu_object( $menu_id );
echo 'Область меню: ' . esc_html( $location ) . ', Название меню: ' . esc_html( $menu->name ) . '<br>';
} else {
echo 'Область меню: ' . esc_html( $location ) . ' не имеет прикреплённого меню.<br>';
}
}
Этот код перебирает все зарегистрированные области меню и выводит как их ярлыки, так и названия прикреплённых к ним меню. Если к области не прикреплено меню, выводится соответствующее сообщение.
Заключение
Функция get_nav_menu_locations()
— это удобный способ получить информацию о зарегистрированных областях меню и прикреплённых к ним меню. Она особенно полезна для динамического вывода меню на страницах сайта, а также для управления доступом к редактированию меню для различных ролей пользователей.