Меню — один из ключевых элементов навигации на сайте WordPress. Часто при развитии проекта возникает необходимость автоматизировать управление меню: создавать, обновлять или удалять пункты меню программно или с помощью плагинов. Это особенно актуально при большом объёме контента и частых изменениях структуры сайта.
Почему важно автоматизировать управление меню в WordPress
Ручное обновление меню — рутинная и ошибкоопасная задача. Особенно если меню зависит от динамического контента, например, категорий, таксономий или пользовательских типов записей. Автоматизация позволяет:
- Обеспечить актуальность меню без ручного вмешательства.
- Сократить время на администрирование сайта.
- Избежать ошибок и несоответствий в структуре меню.
- Создавать динамические меню в зависимости от условий, например, роли пользователя или текущей страницы.
Использование кода для автоматизации меню в WordPress
WordPress предоставляет функцию wp_get_nav_menu_items() для получения пунктов меню, а также набор функций для программного создания и изменения меню, например:
wp_create_nav_menu($menu_name)— создаёт меню.wp_update_nav_menu_item($menu_id, $menu_item_db_id, $args)— обновляет или добавляет пункт меню.
Рассмотрим пример функции для автоматического создания меню с несколькими пунктами:
function wpshab_create_custom_menu() {
$menu_name = 'Автоматическое меню';
// Проверяем, существует ли меню
$menu_exists = wp_get_nav_menu_object($menu_name);
if (!$menu_exists) {
$menu_id = wp_create_nav_menu($menu_name);
// Добавляем пункты меню
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Главная'),
'menu-item-url' => home_url('/'),
'menu-item-status' => 'publish'
));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Блог'),
'menu-item-url' => home_url('/blog/'),
'menu-item-status' => 'publish'
));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Контакты'),
'menu-item-url' => home_url('/contacts/'),
'menu-item-status' => 'publish'
));
// Привязываем меню к локации
$locations = get_theme_mod('nav_menu_locations');
$locations['primary'] = $menu_id;
set_theme_mod('nav_menu_locations', $locations);
}
}
add_action('after_setup_theme', 'wpshab_create_custom_menu');Этот код создаст меню «Автоматическое меню» с тремя пунктами и назначит его на локацию с идентификатором primary. Подставьте свою локацию меню, если она отличается.
Динамическое обновление меню по таксономиям
Если у вас есть категории или кастомные таксономии, можно автоматически добавить их в меню. Пример добавления всех категорий в меню:
function wpshab_add_categories_to_menu() {
$menu_name = 'Автоматическое меню';
$menu = wp_get_nav_menu_object($menu_name);
if (!$menu) return;
$menu_id = $menu->term_id;
$categories = get_categories(array('hide_empty' => false));
foreach ($categories as $category) {
// Проверяем, есть ли уже пункт меню с такой ссылкой
$items = wp_get_nav_menu_items($menu_id);
$exists = false;
if($items) {
foreach ($items as $item) {
if ($item->url == get_category_link($category->term_id)) {
$exists = true;
break;
}
}
}
if (!$exists) {
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => $category->name,
'menu-item-url' => get_category_link($category->term_id),
'menu-item-status' => 'publish'
));
}
}
}
add_action('init', 'wpshab_add_categories_to_menu');Так меню будет автоматически пополняться новыми категориями, без вашего участия.
Плагины для автоматизации меню в WordPress
Использование плагинов значительно упрощает задачу, особенно если вы не хотите писать код.
1. Clearfy Pro
Этот плагин содержит функционал для оптимизации и управления меню, включая автоматическое скрытие пустых пунктов, удаление дублей и настройку видимости по ролям пользователей. Clearfy Pro помогает быстро настроить меню под ваши требования без программирования.
2. WP Menu Cart
Если у вас WooCommerce, плагин WP Menu Cart позволяет добавить корзину прямо в меню, автоматически обновляя количество товаров и стоимость.
3. Max Mega Menu
Плагин Max Mega Menu позволяет создавать сложные выпадающие меню с автоматическим обновлением через административную панель. Поддерживает виджеты и кастомизацию.
Автоматизация изменения меню на основе роли пользователя
Иногда нужно показывать разные пункты меню разным группам посетителей. Для этого можно использовать фильтр wp_nav_menu_objects. Пример кода, скрывающего пункт меню с ID 42 для всех, кроме администраторов:
function wpshab_filter_menu_items_by_role($items) {
if (!current_user_can('administrator')) {
foreach ($items as $key => $item) {
if ($item->ID == 42) {
unset($items[$key]);
}
}
}
return $items;
}
add_filter('wp_nav_menu_objects', 'wpshab_filter_menu_items_by_role');Так вы можете гибко управлять видимостью пунктов меню без дополнительных плагинов.
Советы по оптимизации и отладке автоматизации меню
При автоматическом создании и изменении меню важно:
- Проверять, что меню существует перед обновлением.
- Использовать правильные локации меню, соответствующие вашей теме.
- Кэшировать результаты, если меню формируется динамически, чтобы не перегружать сервер.
- Тестировать изменения в разных ролях пользователей и на разных устройствах.
- Использовать плагины, такие как Clearfy Pro, для оптимизации и устранения конфликтов.
Выводы
Автоматизация управления меню в WordPress существенно упрощает поддержку сайта, особенно при динамическом содержимом и сложной структуре. Используйте встроенные функции WordPress для программного создания и обновления меню, комбинируйте это с проверками и кэшированием. Для менее технических пользователей отлично подойдут плагины, расширяющие возможности меню и позволяющие гибко настраивать навигацию.