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

Почему важно автоматически очищать корзину WordPress

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

По умолчанию WordPress удаляет записи из корзины через 30 дней, но часто этого времени недостаточно или наоборот слишком много. В этой статье мы разберем, как с помощью собственного кода автоматизировать удаление записей из корзины по вашим правилам, например, удалять записи старше 7 дней или очищать корзину ежедневно.

Рассмотрим как реализовать это с помощью хуков и cron задач WordPress, а также приведем примеры плагинов, которые могут помочь в задаче.

Как работает корзина (trash) в WordPress и почему записи там не удаляются сразу

Корзина — это специальный статус записи (post_status = 'trash'), который позволяет временно скрыть запись без физического удаления из базы. Записи в корзине не видны на сайте, но хранятся в базе данных.

Стандартно WordPress хранит записи в корзине 30 дней. По истечении этого срока включается процесс очистки, удаляющий устаревшие записи. Однако этот процесс запускается только при посещении сайта, и если трафик небольшой, корзина может не очищаться вовремя.

Если нужно изменить этот срок или добавить дополнительные условия очистки — придется вмешаться в работу WordPress программно.

Функция для удаления записей из корзины старше определенного срока

Создадим функцию, которая будет находить и удалять записи в корзине, которые были туда помещены более 7 дней назад. Для этого нам нужно:

  • Получить из базы все записи со статусом trash;
  • Проверить дату их последнего изменения (post_modified);
  • Удалить те, у которых дата устарела.

Ниже пример кода, который можно добавить в файл functions.php вашей темы или в собственный плагин:

function wpmy_delete_old_trash_posts() {
    $days_to_keep = 7; // количество дней хранения в корзине
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));

    // Получаем записи со статусом trash, дата изменения старше порога
    $args = array(
        'post_status'    => 'trash',
        'date_query'     => array(
            array(
                'column' => 'post_modified',
                'before' => $date_threshold,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $old_trash_posts = get_posts($args);

    if (!empty($old_trash_posts)) {
        foreach ($old_trash_posts as $post_id) {
            // Полное удаление записи из базы
            wp_delete_post($post_id, true);
        }
    }
}

Эта функция удалит все записи из корзины старше 7 дней. Параметр true в wp_delete_post означает физическое удаление, а не перемещение в корзину.

Настройка автоматического запуска: использование WP-Cron

Чтобы функция запускалась автоматически, нужно создать cron задачу WordPress, которая будет вызывать эту функцию с нужной периодичностью, например, раз в сутки.

Добавим в functions.php следующий код для регистрации события и обработки:

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpmy_daily_trash_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpmy_daily_trash_cleanup');
}

// Хук на нашу кастомную задачу
add_action('wpmy_daily_trash_cleanup', 'wpmy_delete_old_trash_posts');

// Очистка при деактивации темы или плагина
function wpmy_deactivate_cleanup() {
    wp_clear_scheduled_hook('wpmy_daily_trash_cleanup');
}
// Здесь нужно вызвать wpmy_deactivate_cleanup() при деактивации плагина или темы

Таким образом функция wpmy_delete_old_trash_posts будет вызываться каждый день и очищать корзину от старых записей.

Примеры плагинов для управления корзиной WordPress

Если хотите использовать готовые решения без программирования, обратите внимание на следующие плагины:

  • WP Bulk Delete — позволяет удалять записи по различным параметрам, включая статус, дату и тип.
  • Advanced Database Cleaner — умеет чистить базу, включая корзину, и оптимизировать таблицы.
  • Trash Duplicate and 301 Redirect — помогает управлять дубликатами и корзиной.

Однако для тонкой настройки и интеграции с вашими задачами кодовый подход более гибкий.

Дополнительные советы и рекомендации при работе с корзиной

При автоматическом удалении записей из корзины важно учитывать:

  • Не удаляйте записи, которые могут понадобиться для восстановления — настройте срок в зависимости от ваших бизнес-процессов.
  • Проверьте совместимость с плагинами, которые могут использовать корзину для своих нужд.
  • Тестируйте скрипты на тестовом сайте, чтобы избежать потери важных данных.

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

Как создать автоматический импорт CSV файлов в WordPress с помощью кода
20.03.2026
Как создать shortcode для выбора данных в WordPress
16.11.2025
Как автоматизировать создание и удаление черновиков в WordPress
07.02.2026
WooCommerce: как правильно установить лимит на количество товаров в корзине
07.06.2026
Как использовать WP-Cron для автоматизации задач в WordPress
14.01.2026