has_nav_menu()
Проверяет, имеет ли зарегистрированная область для меню прикрепленное к ней меню. Условный тег.
Работает на основе: get_nav_menu_locations()
Хуки из функции
Возвращает
true|false
.
Использование
if( has_nav_menu( $location ) ){ // ... }
- $location(строка) (обязательный)
- Идентификатор расположения меню, указанный при регистрации области меню в функции register_nav_menu().
Примеры
#1 Выведем меню, если оно есть
Допустим, в теме зарегистрировано несколько областей для меню.
functions.php
add_action( 'after_setup_theme', function () { // Различные настройки темы // ... // Регистрация областей для меню register_nav_menus( array( 'header-menu' => 'Область меню в шапке', 'footer-menu' => 'Область меню в подвале', ) ); } );
Теперь проверим прикреплено ли меню к указанной области и если да - выведем меню:
header.php
if( has_nav_menu('header-menu') ){ wp_nav_menu( array( 'theme_location' => 'header-menu' ) ); }
footer.php
if( has_nav_menu('footer-menu') ){ wp_nav_menu( array( 'theme_location' => 'footer-menu' ) ); }
Список изменений
С версии 3.0.0 | Введена. |
Код has_nav_menu() has nav menu WP 6.3.1
function has_nav_menu( $location ) { $has_nav_menu = false; $registered_nav_menus = get_registered_nav_menus(); if ( isset( $registered_nav_menus[ $location ] ) ) { $locations = get_nav_menu_locations(); $has_nav_menu = ! empty( $locations[ $location ] ); } /** * Filters whether a nav menu is assigned to the specified location. * * @since 4.3.0 * * @param bool $has_nav_menu Whether there is a menu assigned to a location. * @param string $location Menu location. */ return apply_filters( 'has_nav_menu', $has_nav_menu, $location ); }