Меню в WordPress — ключевой элемент навигации, который часто требует регулярного обновления и адаптации под новые задачи сайта. Если вы управляете большим проектом или часто меняете структуру сайта, ручное редактирование меню через админку становится утомительным и подверженным ошибкам. В этой статье мы рассмотрим, как автоматизировать управление меню в WordPress с помощью кода, а также приведём практические примеры создания, обновления и удаления меню программно.
Зачем нужна автоматизация меню в WordPress
Автоматизация меню позволяет:
- Программно создавать и обновлять меню без необходимости заходить в админку.
- Обеспечивать единообразие структуры меню на нескольких сайтах или в мультисайте.
- Интегрировать меню с внешними данными, например, динамически формировать пункты из базы или API.
- Ускорить развертывание новых сайтов или тем, сразу со всеми нужными меню.
Благодаря этому снижается риск ошибок и повышается контроль над навигацией.
Создание меню программно: функция wpmanager_register_menu
Для начала создадим функцию, которая проверит наличие меню с нужным названием и создаст его, если его нет. Это удобно при установке темы или плагина.
function wpmanager_register_menu($menu_name) {
$menu_exists = wp_get_nav_menu_object($menu_name);
if (!$menu_exists) {
$menu_id = wp_create_nav_menu($menu_name);
return $menu_id;
}
return $menu_exists->term_id;
}
Эту функцию можно вызывать в хуке after_setup_theme или при активации плагина, чтобы гарантировать наличие нужного меню.
Пример использования
add_action('after_setup_theme', function() {
wpmanager_register_menu('Главное меню');
});
Добавление пунктов меню: функция wpmanager_add_menu_item
После создания меню необходимо добавить в него пункты. Разберём, как это сделать программно:
function wpmanager_add_menu_item($menu_name, $item_title, $item_url, $parent_id = 0, $item_type = 'custom') {
$menu = wp_get_nav_menu_object($menu_name);
if (!$menu) {
$menu_id = wpmanager_register_menu($menu_name);
} else {
$menu_id = $menu->term_id;
}
// Проверяем, есть ли уже такой пункт
$items = wp_get_nav_menu_items($menu_id);
foreach ($items as $item) {
if ($item->title === $item_title && $item->url === $item_url) {
return $item->ID; // Уже есть такой пункт
}
}
$item_data = array(
'menu-item-object-id' => 0,
'menu-item-object' => '',
'menu-item-parent-id' => $parent_id,
'menu-item-type' => $item_type,
'menu-item-title' => $item_title,
'menu-item-url' => $item_url,
'menu-item-status' => 'publish'
);
return wp_update_nav_menu_item($menu_id, 0, $item_data);
}
Пояснения:
$menu_name— название меню, куда добавляем пункт.$item_title— заголовок пункта меню.$item_url— ссылка, на которую ведёт пункт.$parent_id— ID родительского пункта, если нужна вложенность.$item_type— тип пункта (обычно 'custom' для произвольной ссылки).
Пример добавления пункта в меню
add_action('after_setup_theme', function() {
$menu_name = 'Главное меню';
$item_title = 'О нас';
$item_url = home_url('/about/');
wpmanager_add_menu_item($menu_name, $item_title, $item_url);
});
Обновление и удаление пунктов меню
Обновление пункта меню сводится к вызову функции wp_update_nav_menu_item с ID элемента и новыми данными.
function wpmanager_update_menu_item($item_id, $new_title, $new_url) {
$item_data = array(
'menu-item-title' => $new_title,
'menu-item-url' => $new_url,
'menu-item-status' => 'publish'
);
wp_update_nav_menu_item(0, $item_id, $item_data);
}
Для удаления пункта меню используйте:
wp_delete_post($item_id, true); // true — безвозвратное удаление
Динамическое меню на основе таксономии или пользовательских данных
Иногда нужно, чтобы меню формировалось автоматически из категорий, тегов или кастомных таксономий. Это помогает не обновлять меню вручную при добавлении новых разделов.
Пример генерации меню из категорий:
function wpmanager_generate_menu_from_categories($menu_name) {
$menu_id = wpmanager_register_menu($menu_name);
// Чистим меню от старых пунктов
$items = wp_get_nav_menu_items($menu_id);
if ($items) {
foreach ($items as $item) {
wp_delete_post($item->ID, true);
}
}
$categories = get_categories(array('hide_empty' => false));
foreach ($categories as $cat) {
wpmanager_add_menu_item($menu_name, $cat->name, get_category_link($cat->term_id));
}
}
Вызовите эту функцию при необходимости обновить меню:
add_action('init', function() {
wpmanager_generate_menu_from_categories('Категории');
});
Использование плагинов для расширенной автоматизации меню
Если хочется более продвинутого управления меню с визуальным интерфейсом и возможностью интеграции с другими сервисами, обратите внимание на плагин Clearfy Pro. Он предлагает расширенные инструменты оптимизации и некоторые функции для управления меню и навигацией.
Для автоматического обновления меню при импорте контента рекомендую также изучить плагин WPRemark, который позволяет программно взаимодействовать с элементами сайта.
Советы по автоматизации меню в многосайтовой среде
Если у вас мультисайт, и нужно синхронизировать меню между сайтами, можно использовать функции WordPress для переключения контекста:
switch_to_blog($blog_id);
// создаём или обновляем меню
restore_current_blog();
Это позволяет централизованно управлять меню для всех сайтов сети.
Заключение по автоматизации меню в WordPress
Автоматизация управления меню с помощью кода позволяет сделать навигацию гибкой, удобной и управляемой, особенно на больших и динамичных сайтах. Используйте описанные функции для создания, добавления, обновления и удаления пунктов. Для расширенных возможностей можно подключить проверенные плагины с поддержкой автоматизации.
Такой подход экономит время, снижает ошибки и облегчает поддержку сайта.