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

Что такое неактивные корзины в WooCommerce и почему их стоит удалять?

В WooCommerce корзины создаются автоматически, когда пользователь добавляет товар, но не оформляет заказ. Такие корзины накапливаются в базе данных как записи типа shop_order со статусом wc-pending или специальным метаполем корзины. Они занимают место и влияют на производительность, особенно на крупных магазинах.

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

Для начала нужно проверить, сколько заказов в базе — сколько из них открытые, но без перехода к оплате.

Пример SQL-запроса для подсчёта заказов со статусом wc-pending старше 7 дней:

SELECT COUNT(ID) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-pending' AND post_date < NOW() - INTERVAL 7 DAY;

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

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

1. Регистрация собственного периода для WP-Cron (например, раз в сутки)

add_filter('cron_schedules', function($schedules) {
    if (!isset($schedules['daily_custom'])) {
        $schedules['daily_custom'] = [
            'interval' => 86400, // 24 часа
            'display' => __('Каждый день')
        ];
    }
    return $schedules;
});

2. Запланировать событие при активации плагина или темы

register_activation_hook(__FILE__, function() {
    if (!wp_next_scheduled('wpunit_delete_old_carts')) {
        wp_schedule_event(time(), 'daily_custom', 'wpunit_delete_old_carts');
    }
});

register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wpunit_delete_old_carts');
});

3. Функция удаления корзин старше 7 дней

add_action('wpunit_delete_old_carts', function() {
    global $wpdb;
    $days = 7;
    $threshold_date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Выбираем ID заказов в статусе wc-pending старше threshold_date
    $order_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = 'wc-pending' AND post_date < %s",
        $threshold_date
    ));

    if (!empty($order_ids)) {
        foreach ($order_ids as $order_id) {
            wp_delete_post($order_id, true); // Полное удаление
        }
    }
});

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

  • Подождите 24 часа после активации и проверьте количество заказов со статусом wc-pending старше 7 дней SQL-запросом из раздела диагностики.
  • Для немедленной проверки можно вручную запустить функцию из консоли WP-CLI или временно вызвать хук в коде:
do_action('wpunit_delete_old_carts');
  • Убедитесь, что старые неактивные корзины удалились из базы.

Частые ошибки при автоматическом удалении корзин и способы их исправления

  • Удаление заказов с другим статусом: ошибочный фильтр статуса может привести к удалению активных или оплаченных заказов. Всегда проверяйте статус wc-pending.
  • Проблемы с WP-Cron: если WP-Cron не запускается (например, из-за отсутствия посещений сайта), задача не сработает. Для стабильности используйте реальный системный cron или плагин для запуска WP-Cron по расписанию.
  • Удаление заказов с незавершёнными платежами: если магазин использует сторонние платежные шлюзы, проверьте, не помешает ли удаление обработке платежей. Возможно, стоит увеличить период хранения корзин.

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

  • Удаляйте только заказы со статусом wc-pending, чтобы не повредить данные пользователей и статистику.
  • Добавьте в код логирование количества удалённых заказов для контроля и отладки.
  • Если заказов много, удаляйте партиями (например, по 50), чтобы не перегружать сервер и избежать ошибок таймаута.
  • Рассмотрите использование плагина Clearfy Pro для автоматизации и расширенной очистки базы WooCommerce с возможностью тонких настроек: https://wpshop.ru/plugins/clearfy

Сравнение способов удаления неактивных корзин WooCommerce

СпособПлюсыМинусыРекомендуется для
WP-Cron с кастомным кодомПолный контроль, бесплатный, гибкийЗависит от работы WP-Cron, требует навыков разработкиРазработчики, магазины с уникальными условиями
Плагины очистки базы (например, Clearfy Pro)Простота настройки, дополнительные функции оптимизацииПлатные, ограниченная кастомизацияАдминистраторы без навыков программирования
Ручное удаление через phpMyAdmin или SQLБыстро и точно при необходимостиРиск ошибок, требует знаний SQL, не автоматизированоЭкстренные случаи, администраторы БД
Как создать автоматические бэкапы базы данных WordPress без плагинов
15.01.2026
Как использовать REST API в WordPress для создания кастомных решений
22.11.2025
Как удалить все метаданные WordPress из базы данных
15.12.2025
Как использовать REST API для автоматического создания и обновления товаров WooCommerce
20.04.2026
Автоматическое удаление старых товаров WooCommerce с помощью WP-Cron
28.05.2026