В этой статье мы подробно рассмотрим, как автоматизировать процесс создания и обновления главных меню в WordPress. Такая задача часто возникает при запуске множества сайтов или при необходимости регулярно менять структуру меню без ручного вмешательства. Мы разберем, как написать собственные функции для автоматического создания меню, добавить пункты и обновлять их с помощью кода, а также какие плагины помогут упростить задачу.
Зачем автоматизировать создание меню в WordPress
Главное меню — важный элемент любой темы WordPress. Обычно его создают вручную через админку, что занимает время и не всегда удобно при массовом управлении сайтами или частых изменениях. Автоматизация позволяет:
- Сэкономить время при настройке новых сайтов.
- Обеспечить консистентность и стандартизацию меню.
- Быстро обновлять пункты меню по заданному шаблону.
- Интегрировать меню с внешними данными или API.
Особенно полезна автоматизация для разработчиков и агентств, которые работают с множеством проектов на WordPress.
Регистрация и создание меню программно через функции WPBit
Для начала нужно зарегистрировать локацию меню в теме, если это еще не сделано. Добавьте в файл functions.php вашей темы следующий код:
function wpbit_register_menus() {
register_nav_menus([
'primary' => __('Главное меню', 'wpbit'),
'footer' => __('Меню в футере', 'wpbit')
]);
}
add_action('after_setup_theme', 'wpbit_register_menus');Теперь создадим функцию для автоматического создания меню, если оно еще не существует, и добавим пункты в меню:
function wpbit_create_or_update_menu() {
$menu_name = 'Главное меню';
$menu_exists = wp_get_nav_menu_object($menu_name);
if (!$menu_exists) {
$menu_id = wp_create_nav_menu($menu_name);
// Добавляем пункты меню
wpbit_add_menu_item($menu_id, 'Главная', home_url('/'));
wpbit_add_menu_item($menu_id, 'Блог', home_url('/blog'));
wpbit_add_menu_item($menu_id, 'Контакты', home_url('/contacts'));
// Привязываем меню к локации 'primary'
$locations = get_theme_mod('nav_menu_locations');
$locations['primary'] = $menu_id;
set_theme_mod('nav_menu_locations', $locations);
} else {
// Если меню существует, можно обновить пункты
$menu_id = $menu_exists->term_id;
// Для примера обновим или добавим пункт "О нас"
wpbit_update_or_add_menu_item($menu_id, 'О нас', home_url('/about'));
}
}
function wpbit_add_menu_item($menu_id, $title, $url) {
wp_update_nav_menu_item($menu_id, 0, [
'menu-item-title' => $title,
'menu-item-url' => $url,
'menu-item-status' => 'publish'
]);
}
function wpbit_update_or_add_menu_item($menu_id, $title, $url) {
$items = wp_get_nav_menu_items($menu_id);
$exists = false;
if ($items) {
foreach ($items as $item) {
if ($item->title === $title) {
// Обновляем URL
wp_update_nav_menu_item($menu_id, $item->ID, [
'menu-item-url' => $url
]);
$exists = true;
break;
}
}
}
if (!$exists) {
wpbit_add_menu_item($menu_id, $title, $url);
}
}
// Запускаем функцию при инициализации админки
add_action('admin_init', 'wpbit_create_or_update_menu');Этот код проверяет наличие меню с названием "Главное меню", создает его при отсутствии, добавляет пункты и привязывает меню к локации "primary". Если меню уже есть, обновляет или добавляет пункт "О нас".
Использование плагинов для автоматизации меню
Если вы предпочитаете не писать свой код или хотите более гибкие настройки, существуют плагины, которые помогут автоматизировать меню:
- WP Menu Exporter — позволяет экспортировать и импортировать меню между сайтами.
- Nav Menu Roles — управление видимостью пунктов меню для разных ролей, можно автоматизировать показ/скрытие.
- Custom Menu Wizard — строит меню на основе категорий и записей автоматически.
Для более продвинутых решений можно интегрировать плагины с REST API WordPress и запускать обновления меню по расписанию через Cron, чтобы меню всегда соответствовало актуальному контенту.
Автоматизация обновления меню через Cron и AJAX
Иногда нужно, чтобы меню обновлялось автоматически по расписанию или по событию без участия пользователя. Для этого можно использовать Cron и AJAX. Пример простой реализации автоматического обновления меню по Cron:
function wpbit_schedule_menu_update() {
if (!wp_next_scheduled('wpbit_cron_update_menu')) {
wp_schedule_event(time(), 'hourly', 'wpbit_cron_update_menu');
}
}
add_action('wp', 'wpbit_schedule_menu_update');
function wpbit_cron_update_menu_callback() {
// Здесь вызываем нашу функцию обновления меню
wpbit_create_or_update_menu();
}
add_action('wpbit_cron_update_menu', 'wpbit_cron_update_menu_callback');Этот код будет ежечасно запускать обновление меню. Если нужен моментальный отклик на действия пользователя, можно использовать AJAX-запросы для обновления меню без перезагрузки страницы.
Пример AJAX-обработчика для обновления меню
add_action('wp_ajax_wpbit_update_menu', 'wpbit_ajax_update_menu');
function wpbit_ajax_update_menu() {
if (!current_user_can('manage_options')) {
wp_send_json_error('Доступ запрещен');
}
wpbit_create_or_update_menu();
wp_send_json_success('Меню обновлено');
}В JavaScript вызов можно сделать так:
jQuery.post(ajaxurl, {action: 'wpbit_update_menu'}, function(response) {
if(response.success) {
alert(response.data);
} else {
alert('Ошибка: ' + response.data);
}
});Рекомендации и лучшие практики
При автоматизации меню важно учитывать следующие моменты:
- Всегда проверяйте права пользователя перед изменением меню.
- Используйте локализацию строк, если делаете многоязычный сайт.
- Тестируйте код на тестовом сайте, чтобы избежать случайного удаления меню или пунктов.
- При использовании Cron не создавайте слишком частые задания, чтобы не перегружать сервер.
Также удобно хранить структуру меню в отдельном конфигурационном файле или в базе данных, чтобы легко редактировать список пунктов без правки кода.
Заключение
Автоматизация создания и обновления главных меню в WordPress — мощный инструмент для разработчиков и владельцев сайтов, позволяющий экономить время и поддерживать консистентность дизайна и структуры. Используя собственные функции или плагины, а также возможности Cron и AJAX, вы сможете настроить меню под любые задачи и интегрировать его с внешними системами.
Для удобной работы с WordPress рекомендуем ознакомиться с плагином Clearfy, который содержит множество инструментов для оптимизации и автоматизации, включая управление меню.