Функция unregister_nav_menu()
используется для удаления ранее зарегистрированного места для меню навигации в теме WordPress. Это может быть полезно в случае, когда вам нужно изменить или удалить навигационные области, которые больше не актуальны.
unregister_nav_menu( string $location ): bool
- $location(string) — Идентификатор места меню, которое необходимо удалить.
- Возвращаемое значение(bool) — Возвращает
true
, если удаление прошло успешно, илиfalse
, если возникла ошибка.
Основное использование
Для удаления ранее зарегистрированного меню, например, меню с идентификатором primary
, используется следующая команда:
unregister_nav_menu( 'primary' );
Этот код удалит место меню с названием primary
, которое, как правило, является основным навигационным меню темы.
Пример базовой структуры
// Удаление меню с идентификатором primary
function remove_primary_nav_menu() {
unregister_nav_menu( 'primary' );
}
add_action( 'init', 'remove_primary_nav_menu' );
Этот код следует разместить в файле functions.php
вашей темы или в плагине. После его выполнения меню с идентификатором primary
больше не будет доступно для регистрации.
Полное удаление места меню
Если вам необходимо полностью удалить место для меню, включая его регистрацию в теме, потребуется дополнительный шаг. Функция unregister_nav_menu()
не удаляет информацию о меню, хранящуюся в модификаторах темы, поэтому нам нужно вручную удалить привязку этого места из массива зарегистрированных меню.
Пример полного удаления меню
Вот пример, который показывает, как удалить место для меню не только через unregister_nav_menu()
, но и очистить информацию из модификаторов темы:
if ( ! function_exists( 'delete_nav_menu_location' ) ) {
function delete_nav_menu_location( $location ) {
// Получаем текущие зарегистрированные места меню
$locations = get_theme_mod( 'nav_menu_locations' );
// Проверяем, существует ли место меню, которое нужно удалить
if ( is_array( $locations ) && array_key_exists( $location, $locations ) ) {
unset( $locations[ $location ] ); // Удаляем место меню
set_theme_mod( 'nav_menu_locations', $locations ); // Обновляем модификатор темы
return true;
}
return false;
}
}
// Используем функцию для удаления меню с идентификатором primary
delete_nav_menu_location( 'primary' );
Удаление меню по условию
Иногда может возникнуть необходимость удалять меню только при определенных условиях, например, если пользователь не авторизован или при использовании определенной темы. Пример ниже показывает, как удалить меню для неавторизованных пользователей:
function conditional_nav_menu_removal() {
if ( ! is_user_logged_in() ) {
unregister_nav_menu( 'primary' );
}
}
add_action( 'init', 'conditional_nav_menu_removal' );
Этот код удалит меню с идентификатором primary
, если пользователь не авторизован.
Удаление меню при смене темы
Если вы разрабатываете тему или плагин, и вам нужно удалить меню только при активации определенной темы, можно использовать следующий код:
function theme_switch_nav_menu_removal() {
if ( get_template() === 'my_theme_slug' ) {
unregister_nav_menu( 'secondary' );
}
}
add_action( 'after_setup_theme', 'theme_switch_nav_menu_removal' );
Этот код проверяет, активна ли определенная тема (my_theme_slug
), и удаляет меню с идентификатором secondary
, если это условие выполнено.
Получение всех зарегистрированных меню
Для получения списка всех зарегистрированных мест для меню можно использовать функцию get_nav_menu_locations()
. Она возвращает массив, где ключами являются идентификаторы мест, а значениями — ID меню, привязанных к этим местам.
$menu_locations = get_nav_menu_locations();
print_r( $menu_locations );
Этот код выведет все зарегистрированные места для меню и соответствующие им ID.
Регистрация нового меню
Чтобы зарегистрировать новое меню в теме, используется функция register_nav_menu()
:
function register_my_menus() {
register_nav_menu( 'footer', 'Footer Menu' );
}
add_action( 'init', 'register_my_menus' );
Этот код добавляет новое место для меню с идентификатором footer
, которое можно использовать в футере сайта.
Заключение
Функция unregister_nav_menu()
— это простой способ удалить зарегистрированные места для меню в WordPress. Для полного удаления всех следов места меню может понадобиться дополнительная очистка модификаторов темы. Примеры, приведенные выше, помогут вам настроить удаление меню в зависимости от ваших задач, будь то разработка тем или плагинов.