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

Диагностика проблемы: накопление неактивных заказов и корзин в WooCommerce

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

Проблемы, которые возникают из-за неочищенных данных:

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

Как проверить наличие неактивных заказов и корзин

В админке WooCommerce перейдите в Заказы и отфильтруйте по статусу pending, failed, cancelled. Посмотрите, сколько заказов не меняли статус и дату обновления в течение 30+ дней.

Для корзин можно использовать SQL-запрос к таблице wp_woocommerce_sessions (если используется стандартный механизм сессий) или проверить плагинами, которые отслеживают брошенные корзины.

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

1. Удаление неактивных заказов

Создадим функцию, которая удаляет заказы с определёнными статусами, которые не обновлялись более 30 дней. Добавьте следующий код в functions.php вашей темы или в отдельный плагин:

function wptem_delete_old_wc_orders() {
    $statuses = array( 'pending', 'failed', 'cancelled' );
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( '-30 days' ) );

    $args = array(
        'limit' => -1,
        'status' => $statuses,
        'date_modified' => '<' . $date_threshold,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true ); // true — без возможности восстановления
    }
}

// Запускаем очистку раз в сутки
add_action( 'woocommerce_cleanup_old_orders_daily', 'wptem_delete_old_wc_orders' );

// Планировщик событий
if ( ! wp_next_scheduled( 'woocommerce_cleanup_old_orders_daily' ) ) {
    wp_schedule_event( time(), 'daily', 'woocommerce_cleanup_old_orders_daily' );
}

2. Удаление неактивных сессий (корзин)

WooCommerce хранит сессии в таблице wp_woocommerce_sessions. Можно удалить записи, которые не обновлялись более 30 дней.

Добавьте следующий код в тот же файл:

function wptem_delete_old_wc_sessions() {
    global $wpdb;
    $threshold = strtotime( '-30 days' );

    $table = $wpdb->prefix . 'woocommerce_sessions';

    $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $threshold
    ) );
}

add_action( 'woocommerce_cleanup_old_orders_daily', 'wptem_delete_old_wc_sessions' );

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

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

1. В админке WooCommerce проверьте заказы с нужными статусами — старые должны удалиться после срабатывания крон-задачи (можно запустить вручную с помощью плагина WP Crontrol).

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

3. Используйте запросы SQL для контроля:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed', 'wc-cancelled') AND post_modified < NOW() - INTERVAL 30 DAY;

и

SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));

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

  • Крон-задача не запускается. Проверяйте, что WP-Cron работает. Для теста можно вызвать функцию вручную или использовать плагин WP Crontrol.
  • Удаляются нужные заказы. Проверьте правильность статусов и даты, используемой в условии. Лучше сначала выполнить выборку заказов и проверить их перед удалением.
  • Сессии не удаляются. Возможно, используется сторонний плагин для сессий, и таблица отличается. Проверяйте структуру БД и адаптируйте код.

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

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

Сравнение способов очистки неактивных данных WooCommerce

МетодПреимуществаНедостаткиПример
Ручное удаление в админкеПросто, не требует кодаТрудоемко, не автоматизированоWooCommerce > Заказы > фильтрация и удаление
Автоматизация через WP-Cron и кодПолный контроль, автоматизацияНужны навыки программированияКод из статьи
Плагины для очистки базыУдобно, дополнительные функцииМогут конфликтовать, нагрузкаClearfy Pro, WP-Optimize
Как использовать REST API WordPress для создания нестандартных запросов
30.12.2025
Как использовать AJAX в WordPress для отправки формы без перезагрузки страницы
11.01.2026
Автоматическое изменение robots.txt в WordPress: практические решения и примеры кода
11.04.2026
Как автоматически отменять заказы WooCommerce после неудачной оплаты
19.04.2026
Как сделать динамические таблицы в WordPress без плагинов
09.03.2026