Получение местоположений навигационных меню в WordPress

Получение местоположений навигационных меню в 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()

Эти функции помогут вам лучше управлять меню и их местоположениями в вашей теме.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *