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

Почему важно удалять неактивные корзины и заказы в WooCommerce

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

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

Чтобы понять, насколько актуальна проблема, выполните запрос к базе данных для подсчёта заказов со статусом pending или failed старше 30 дней:

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

Для корзин (сессий) можно проверить таблицу wp_woocommerce_sessions, если она есть:

SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP() - 3600*24*30;

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

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

1. Создаём функцию для удаления заказов по статусам и возрасту

function wc_delete_old_orders() {
    $days = 30; // Период хранения заказов в днях
    $args = array(
        'post_type' => 'shop_order',
        'post_status' => array('wc-pending', 'wc-failed'),
        'date_query' => array(
            array(
                'before' => date('Y-m-d', strtotime("-{$days} days")),
            ),
        ),
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $orders = get_posts($args);

    if (empty($orders)) {
        return;
    }

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

2. Автоматизация через WP-Cron

Добавим задачу, которая будет запускать функцию ежесуточно.

function wc_schedule_old_order_cleanup() {
    if (!wp_next_scheduled('wc_delete_old_orders_event')) {
        wp_schedule_event(time(), 'daily', 'wc_delete_old_orders_event');
    }
}
add_action('wp', 'wc_schedule_old_order_cleanup');
add_action('wc_delete_old_orders_event', 'wc_delete_old_orders');

3. Очистка неактивных сессий (корзин)

WooCommerce хранит сессии в опциях или в кастомной таблице. Для стандартной таблицы wp_woocommerce_sessions можно использовать такой код:

function wc_delete_old_sessions() {
    global $wpdb;
    $days = 30;
    $expiry_limit = time() - ($days * DAY_IN_SECONDS);

    $table = $wpdb->prefix . 'woocommerce_sessions';
    $wpdb->query($wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $expiry_limit
    ));
}
add_action('wc_delete_old_orders_event', 'wc_delete_old_sessions');

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

  • Выполните запросы из блока диагностики через 2-3 дня после активации.
  • Убедитесь, что количество заказов со статусом pending и failed снизилось.
  • Проверьте таблицу сессий на уменьшение записей.
  • Проверьте логи сервера на ошибки, связанные с wp_cron.

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

  • Не срабатывает wp_cron: проверьте, что на сайте посещается хотя бы одна страница в сутки или настройте системный cron.
  • Удаление не происходит: убедитесь, что функция wp_delete_post вызывается с параметром true для безвозвратного удаления.
  • Ошибки при доступе к таблице wp_woocommerce_sessions: проверьте, что таблица существует и используется WooCommerce версией, установленной на сайте.
  • Удаляются нужные заказы: уточните фильтр статусов в запросах, добавьте логи в функцию для контроля.

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

  • Перед внедрением на продакшн тестируйте на копии сайта.
  • Добавьте логирование действий удаления заказов и сессий в отдельный файл для мониторинга.
  • Для больших магазинов лучше запускать удаление партиями, чтобы избежать таймаутов.
  • Используйте WP-CLI для ручного запуска и отладки: wp cron event run wc_delete_old_orders_event.
  • Если используете Clearfy Pro, можно дополнительно оптимизировать базу и отключить лишние функционалы WooCommerce.

Сравнение методов удаления неактивных заказов

МетодОписаниеПлюсыМинусы
Удаление через WP-Cron и кодАвтоматический скрипт на PHP с использованием wp_cronГибкость, без дополнительных плагиновЗависимость от посещаемости сайта, требует навыков разработки
Плагины очистки WooCommerceГотовые инструменты с UI для удаленияПростота, настройка через интерфейсДополнительная нагрузка, могут быть платными
Ручное удаление через базу данныхSQL-запросы напрямую к базеБыстро, без нагрузки на сайтРиск ошибок, требует бэкапа и осторожности
Как создать автоматический импорт товара из Excel в WordPress
07.04.2026
WooCommerce: автоматическое изменение стоимости товара при определённых условиях
18.06.2026
Как использовать AJAX в WordPress для отправки формы без перезагрузки страницы
11.01.2026
WooCommerce: автоматическое удаление неактивных корзин и заказов
21.06.2026
WooCommerce: автоматическое возврат средств после отмены заказа
07.05.2026