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

В WordPress меню — важный элемент навигации, который помогает пользователям быстро ориентироваться на сайте. Однако со временем в меню могут накапливаться устаревшие или нерелевантные пункты, особенно если они связаны с динамическим контентом, например, постами или страницами. Вручную искать и удалять такие пункты неудобно, особенно если меню большое. В этой статье мы разберём, как автоматически удалять старые пункты меню WordPress по дате создания или по другим критериям, используя код и плагины.

Почему в меню появляются старые пункты и зачем их удалять?

Меню WordPress может содержать ссылки на статические страницы, категории, произвольные ссылки и даже на записи блога. Если меню создавалось вручную, старые пункты могут просто лежать без дела. Если же меню формируется динамически (например, через плагин или код), то в него могут попадать устаревшие записи или страницы.

Удаление старых пунктов меню помогает:

  • Поддерживать актуальность навигации;
  • Улучшить пользовательский опыт;
  • Упростить администрирование;
  • Избежать битых ссылок и ошибок.

Рассмотрим несколько способов, как автоматизировать этот процесс.

Автоматическое удаление пунктов меню по дате создания записи

Если пункты меню ссылаются на записи или страницы, можно проверить дату создания этих объектов и удалить ссылки на те, что старше заданного срока.

Обработка меню через фильтр wp_get_nav_menu_items

Для начала получим пункты меню через фильтр wp_get_nav_menu_items и отфильтруем их, удаляя устаревшие.

add_filter('wp_get_nav_menu_items', 'wponline_filter_old_menu_items', 10, 3);
function wponline_filter_old_menu_items($items, $menu, $args) {
    $threshold_date = strtotime('-1 year'); // Удалять пункты старше 1 года
    $filtered_items = [];

    foreach ($items as $item) {
        // Проверяем только пункты, связанные с записями
        if ($item->object === 'post' || $item->object === 'page') {
            $post_date = strtotime(get_post_field('post_date', $item->object_id));
            if ($post_date >= $threshold_date) {
                $filtered_items[] = $item;
            }
        } else {
            // Оставляем другие пункты без изменений
            $filtered_items[] = $item;
        }
    }
    return $filtered_items;
}

В этом коде мы задаём порог в 1 год и фильтруем пункты меню. Пункты, связанные с постами и страницами старше года, удаляются из вывода меню.

Где разместить код

Этот код можно добавить в файл functions.php вашей темы или лучше в плагин для пользовательских функций (например, созданный самостоятельно).

Использование плагинов для автоматизации управления меню

Есть плагины, которые расширяют возможности меню и позволяют динамически формировать его содержимое. Рассмотрим несколько полезных:

  • Clearfy Pro — этот плагин содержит множество оптимизаций, включая автоматическое управление меню и очистку от устаревших элементов.
  • WPCommunity — если вы используете форум или сообщество, этот плагин поможет интегрировать динамическое меню, которое обновляется в зависимости от активности пользователей.

Использование плагинов может значительно упростить работу, но не всегда подходит для специфических задач. В таких случаях лучше использовать кастомный код.

Удаление пунктов меню по пользовательским меткам (CSS классы и атрибуты)

Иногда в меню можно добавлять пользовательские CSS классы или атрибуты, по которым можно фильтровать устаревшие пункты. Например, можно при создании пункта меню добавить класс old-item и потом удалять такие пункты программно.

add_filter('wp_get_nav_menu_items', 'wponline_remove_old_class_menu_items', 10, 3);
function wponline_remove_old_class_menu_items($items, $menu, $args) {
    $filtered_items = [];
    foreach ($items as $item) {
        if (in_array('old-item', $item->classes)) {
            continue; // пропускаем пункты с классом old-item
        }
        $filtered_items[] = $item;
    }
    return $filtered_items;
}

Такой способ удобен, если вы хотите вручную помечать пункты меню для удаления, а потом удалять их автоматически.

Как регулярно чистить меню — планирование задач через WP-Cron

Чтобы автоматизировать удаление пунктов меню без вашего участия, можно настроить регулярную задачу с помощью WP-Cron, которая будет запускать очистку меню по расписанию.

Пример планирования задачи

if (!wp_next_scheduled('wponline_clean_menu_event')) {
    wp_schedule_event(time(), 'daily', 'wponline_clean_menu_event');
}

add_action('wponline_clean_menu_event', 'wponline_clean_menu_callback');

function wponline_clean_menu_callback() {
    // Логика удаления (например, удаляем пункты из базы данных)
    // Здесь нужно получить меню и удалить элементы программно
}

WP-Cron запускает функцию wponline_clean_menu_callback каждый день. Внутри этой функции можно реализовать механизм реального удаления пунктов из меню через функции WordPress, например, wp_delete_post для кастомных пунктов меню (nav_menu_item).

Пример удаления пунктов меню из базы

function wponline_clean_menu_callback() {
    $threshold_date = strtotime('-1 year');
    $menu_locations = get_nav_menu_locations();
    if (empty($menu_locations)) return;
    $menu_id = reset($menu_locations);
    $menu_items = wp_get_nav_menu_items($menu_id);

    foreach ($menu_items as $item) {
        if (($item->object === 'post' || $item->object === 'page') && 
            strtotime(get_post_field('post_date', $item->object_id)) < $threshold_date) {
            wp_delete_post($item->ID, true); // Удаляем пункт меню
        }
    }
}

Обратите внимание, что удаление пунктов меню — это удаление записей типа nav_menu_item из базы данных. Поэтому будьте осторожны и делайте резервные копии перед применением.

Вывод

Автоматизация удаления старых пунктов меню в WordPress помогает поддерживать актуальность навигации и облегчает администрирование сайта. Для большинства случаев достаточно фильтровать вывод меню через wp_get_nav_menu_items, а при необходимости — удалять пункты из базы с помощью WP-Cron. Если хотите облегчить себе жизнь, посмотрите в сторону плагинов типа Clearfy Pro, которые автоматизируют множество рутинных задач.

Как использовать WP-CLI для управления WooCommerce
02.05.2026
WooCommerce: автоматическое изменение стоимости товаров при определённых условиях
09.05.2026
Как избежать проблем с переносом WordPress между серверами
03.12.2025
WooCommerce: автоматическое изменение стоимости товаров при определённых условиях
26.05.2026
Как настроить удалённый запуск задач в WordPress с помощью WP-Cron
20.01.2026