WooCommerce: автоматическое очищение корзин и отменённых заказов

Диагностика проблемы: зачем очищать корзины и отменённые заказы

В WooCommerce накапливаются данные о заброшенных корзинах и отменённых заказах. Это влияет на размер базы данных, скорость запросов и может затруднять аналитику. Если корзины не очищать, в базе будут храниться устаревшие данные, а отменённые заказы могут мешать корректному учёту продаж и нагрузке на сервер.

Пошаговое решение: как автоматически удалять заброшенные корзины и отменённые заказы

1. Автоматическое удаление заброшенных корзин

В WooCommerce корзина хранится в сессиях и в базе данных в виде woocommerce_sessions. Удаление старых сессий очистит корзины.

Добавьте в файл functions.php вашей темы или в отдельный плагин следующий код для очистки сессий старше 24 часов:

add_action('wp_scheduled_delete', 'wc_clear_old_cart_sessions');
function wc_clear_old_cart_sessions() {
    global $wpdb;
    $expiration = time() - DAY_IN_SECONDS; // 24 часа назад
    $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM {$wpdb->prefix}woocommerce_sessions WHERE session_expiry < %d",
            $expiration
        )
    );
}

Этот код использует стандартное событие WordPress wp_scheduled_delete, которое вызывается раз в день. Он удалит все сессии, срок действия которых истёк.

2. Автоматическое удаление отменённых заказов

Для удаления заказов со статусом cancelled через 7 дней после изменения статуса используйте следующий код:

function wc_clear_cancelled_orders() {
    $args = [
        'status' => 'cancelled',
        'date_modified' => '<' . ( time() - 7 * DAY_IN_SECONDS ),
        'limit' => -1,
        'return' => 'ids',
    ];
    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Полное удаление
    }
}
add_action('wp_scheduled_delete', 'wc_clear_cancelled_orders');

Этот код также запускается при событии wp_scheduled_delete и удаляет отменённые заказы старше 7 дней.

Проверка результата после внедрения

  • Зайдите в базу данных через phpMyAdmin или аналог и проверьте таблицу woocommerce_sessions — в ней не должно быть записей со сроком действия менее 24 часов назад.
  • В разделе WooCommerce → Заказы проверьте, что отменённые заказы старше 7 дней отсутствуют.
  • Для контроля можно добавить логирование в функции очистки, например, через error_log().

Частые ошибки и как их исправить

  • Удаление не происходит: проверьте, что событие wp_scheduled_delete срабатывает. Можно запускать вручную с помощью WP-CLI: wp cron event run wp_scheduled_delete.
  • Удаляются не те заказы: проверьте параметры в wc_get_orders(). Для фильтра по дате используйте правильный формат даты или timestamp, иногда помогает использование date_query.
  • Удаление корзин не влияет на вид в админке: корзины хранятся в сессиях, их удаление не отображается в интерфейсе, проверьте через базу данных.
  • Проблемы с правами на удаление заказов: убедитесь, что код запускается с правами администратора (например, из плагина или functions.php).

Практические советы по безопасности и производительности

  • Проверяйте перед удалением, что заказы не связаны с активными возвратами или спорами.
  • Не удаляйте заказы сразу после отмены — давайте буфер времени (7+ дней).
  • Для больших магазинов используйте WP-CLI скрипты для пакетной очистки, чтобы не перегружать сервер.
  • Настройте резервное копирование перед внедрением автоматического удаления.
  • Вместо полного удаления можно сначала переводить заказы в статус «архив» с помощью пользовательского статуса, чтобы сохранить историю.

Сравнение вариантов автоматической очистки

МетодПлюсыМинусыПример использования
Код в functions.php Полный контроль, без сторонних плагинов Требует навыков, возможны ошибки при обновлениях Пример кода выше
Плагины (например, WP-Cron Manager + Cleanup) Удобный интерфейс, дополнительные настройки Нагрузка на сайт, лишние зависимости Плагины нужно тщательно выбирать
WP-CLI скрипты Быстрая пакетная очистка, подходит для больших сайтов Требует SSH доступа и знаний командной строки wp post delete $(wp post list --post_type=shop_order --post_status=cancelled --date_query_column=post_modified --before='7 days ago' --format=ids) --force
Как настроить автоматическое сохранение черновиков в WordPress
12.11.2025
Автоматические записи в WordPress: создание и настройка по расписанию
01.02.2026
Как удалить кэш и очистить базу данных WordPress для ускорения сайта
15.11.2025
WooCommerce: автоматическое удаление отменённых заказов с возвратом средств
18.06.2026
WooCommerce: автоматическое изменение статуса заказа при возврате товара
10.06.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.