В процессе разработки и поддержки WordPress-сайтов часто возникает проблема накопления старых, неиспользуемых меню, которые загромождают админ-панель и замедляют работу сайта. В этой статье мы рассмотрим, как автоматизировать удаление таких меню с помощью кода и плагинов, а также дадим рекомендации по их управлению.
Почему важно очищать старые меню в WordPress
Меню в WordPress хранятся в базе данных как таксономия nav_menu. Со временем в админке может накапливаться большое количество неиспользуемых меню, особенно если вы экспериментировали с различными структурами навигации или меняли темы. Это не только создает путаницу, но и замедляет загрузку страницы меню, увеличивает размер базы данных и может привести к ошибкам при импорте/экспорте настроек.
Автоматизация процесса удаления поможет поддерживать базу данных в чистоте и уменьшит ручной труд при обслуживании сайта.
Как узнать, какие меню не используются на сайте
Первым шагом стоит определить, какие меню не привязаны ни к одному из зарегистрированных мест меню в теме. Например, если ваша тема регистрирует места меню с помощью функции register_nav_menus():
register_nav_menus(array(
'primary' => 'Основное меню',
'footer' => 'Меню в футере'
));то любые меню, не назначенные ни на одно из этих мест, можно считать неиспользуемыми.
Для получения списка всех меню и их назначения можно использовать следующий код:
function wplesson_get_unused_menus() {
$locations = get_nav_menu_locations();
$menus = wp_get_nav_menus();
$unused_menus = array();
foreach($menus as $menu) {
$assigned = false;
foreach($locations as $location => $menu_id) {
if($menu->term_id == $menu_id) {
$assigned = true;
break;
}
}
if(!$assigned) {
$unused_menus[] = $menu;
}
}
return $unused_menus;
}Эта функция возвращает массив объектов меню, которые не назначены на места темы.
Автоматическое удаление неиспользуемых меню через WP-Cron
Чтобы удалять старые меню автоматически, можно настроить задачу WP-Cron, которая будет запускаться, например, раз в неделю. При этом можно добавить проверку возраста меню — например, удалять те, которые были созданы более 30 дней назад и не используются.
Для хранения даты создания меню в базе данных WordPress по умолчанию нет отдельного поля, но можно использовать поле term_taxonomy_id или метаполя. Проще всего — добавить метаполе при создании меню с текущей датой.
Пример функции для добавления метаполя даты создания меню при его создании:
add_action('wp_create_nav_menu', 'wplesson_set_menu_creation_date', 10, 1);
function wplesson_set_menu_creation_date($menu_id) {
update_term_meta($menu_id, 'wplesson_menu_created', time());
}Затем создадим функцию, которая будет искать старые неиспользуемые меню и удалять их:
function wplesson_delete_old_unused_menus() {
$unused_menus = wplesson_get_unused_menus();
$now = time();
$days_to_keep = 30; // Удалять меню старше 30 дней
foreach($unused_menus as $menu) {
$created = get_term_meta($menu->term_id, 'wplesson_menu_created', true);
if($created && ($now - $created) >= ($days_to_keep * DAY_IN_SECONDS)) {
wp_delete_term($menu->term_id, 'nav_menu');
}
}
}Осталось зарегистрировать событие WP-Cron, которое будет запускать очистку по расписанию:
if (!wp_next_scheduled('wplesson_weekly_menu_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wplesson_weekly_menu_cleanup');
}
add_action('wplesson_weekly_menu_cleanup', 'wplesson_delete_old_unused_menus');<Использование плагинов для управления меню
Если вы хотите более простой способ управления меню без программирования, можно использовать плагины. Например, WP Menu Manager позволяет быстро просматривать и управлять меню, удалять устаревшие.
Также полезен плагин Clearfy Pro, который оптимизирует множество аспектов WordPress, включая очистку базы данных от неиспользуемых элементов, в том числе меню.
Резюме по автоматизации удаления меню
1. Определите неиспользуемые меню с помощью функции wplesson_get_unused_menus().
2. Добавляйте дату создания меню при их создании через хук wp_create_nav_menu.
3. Настройте WP-Cron для периодического удаления старых меню.
4. При необходимости используйте плагины для удобного управления и очистки меню без кода.
Такой подход поможет поддерживать базу данных WordPress в чистоте, ускорит работу админки и упростит сопровождение сайта.