WooCommerce: автоматическое удаление неактивных корзин и заказов

В чем проблема с неактивными корзинами и заказами в WooCommerce?

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

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

Диагностика проблемы: как определить, что корзины и заказы нужно чистить

  • Проверить количество неоплаченных заказов в WooCommerce: в админке перейдите в «WooCommerce» → «Заказы» и отфильтруйте по статусу pending или failed.
  • Оценить количество неактивных корзин — для этого нужно знать, что WooCommerce сохраняет сессии пользователей в базе данных в таблицах wp_woocommerce_sessions (по умолчанию). Можно выполнить запрос к базе, например, через phpMyAdmin:
    SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY);
    Этот запрос покажет количество сессий, срок которых истек более суток назад.
  • Проанализировать нагрузку на базу данных с помощью плагинов типа Query Monitor — если большое число запросов к таблицам сессий и заказов, это повод для оптимизации.

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

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

WooCommerce по умолчанию не удаляет просроченные сессии пользователей. Чтобы это исправить, можно добавить следующий код в functions.php вашей темы или в отдельный плагин:

function wptem_clear_expired_sessions() {
    global $wpdb;
    $expiry = time();
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM {$table} WHERE session_expiry < %d",
            $expiry
        )
    );
    return $deleted;
}

add_action('wp_scheduled_delete', 'wptem_clear_expired_sessions');

Этот код удаляет из таблицы wp_woocommerce_sessions все записи с истекшим временем сессии при запуске стандартного WP-хука wp_scheduled_delete, который вызывается раз в сутки.

2. Автоматическое удаление неоплаченных заказов старше N дней

Чтобы автоматически удалять неоплаченные заказы (статусы pending, failed) старше, например, 7 дней, используйте следующий код:

function wptem_delete_old_unpaid_orders() {
    $days = 7; // период очистки в днях
    $args = [
        'status' => ['pending', 'failed'],
        'date_created' => '<' . ( time() - $days * DAY_IN_SECONDS ),
        'limit' => -1,
        'return' => 'ids',
    ];

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_trash_post($order_id); // или wp_delete_post($order_id, true); для удаления без корзины
    }
}

add_action('wp_scheduled_delete', 'wptem_delete_old_unpaid_orders');

Этот код удалит заказы, которые не были оплачены более 7 дней назад. Можно настроить интервал по своему усмотрению.

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

  • В базе данных через phpMyAdmin проверьте таблицу wp_woocommerce_sessions — количество записей с истекшим временем сессии должно стремиться к нулю.
  • В админке WooCommerce проверьте раздел заказов — устаревшие неоплаченные заказы должны быть удалены (перемещены в корзину или удалены полностью).
  • Запустите вручную крон-задачу wp_scheduled_delete с помощью плагина WP Crontrol или WP-CLI, чтобы проверить, что функция срабатывает без ошибок:
wp cron event run wp_scheduled_delete

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

  • Удаление не происходит: убедитесь, что на сайте работает WP-Cron или настроен системный cron. Без этого код не запустится автоматически.
  • Удаляются нужные заказы: проверьте фильтр статусов и период — возможно, стоит добавить дополнительные условия, например, проверку мета-данных заказа.
  • Ошибка доступа к базе данных: проверьте префикс таблиц и права пользователя базы данных.
  • Удаление сессий не влияет на корзины пользователей: помните, что иногда корзина хранится в cookie на стороне клиента, очистка сессий не всегда полностью сбрасывает корзину для текущих посетителей.

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

  • Используйте wp_trash_post() вместо wp_delete_post() для возможности восстановления заказов при ошибках.
  • Не удаляйте заказы без резервной копии базы данных — настройте регулярное автоматическое бэкапирование.
  • Проверяйте логи ошибок PHP после внедрения кода, чтобы исключить сбои.
  • Оптимизируйте период запуска задач — для очень больших магазинов лучше запускать очистку в ночное время.
  • Нужно ли удалять заказы с определенными продуктами? Добавьте дополнительный фильтр в запрос wc_get_orders.

Сравнение вариантов очистки неактивных корзин и заказов

МетодПлагинКодПлюсыМинусы
Очистка сессий (корзин) Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wptem.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udalenie-neaktivnyh-korziny-i-zakazov) Код из статьи Плагин — удобство, поддержка, расширенные настройки; код — легковесность, кастомизация Плагин — нагрузка, цена; код — требует навыков, нет интерфейса
Удаление старых заказов WooCommerce Cleanup Tools Код из статьи Плагин — простота, интерфейс; код — гибкость, можно интегрировать в существующие задачи Плагин — может быть избыточен; код — требует тестирования
Как удалить и избавиться от пустых записей в базе данных WordPress
04.01.2026
WooCommerce: автоматическое удаление неактивных корзин и заказов
11.05.2026
Как удалить закрепленные записи в WordPress: практические способы
07.02.2026
Как разделить длинные посты на страницы в WordPress
13.03.2026
Как автоматизировать удаление спама в комментариях WordPress
18.02.2026