Как автоматизировать удаление старых меню в WordPress

В процессе разработки и поддержки 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 в чистоте, ускорит работу админки и упростит сопровождение сайта.

Автоматическое удаление старых записей в WordPress с помощью WP-Cron
01.05.2026
Как добавить автоматические редиректы после изменения слага записи в WordPress
17.04.2026
Как избежать проблем с производительностью при многоязычности в WordPress
13.12.2025
Как использовать внешние шаблоны для WooCommerce без конфликтов
09.05.2026
Как использовать хуки WooCommerce для кастомизации отзывов на товары
19.05.2026