WooCommerce: автоматическое очищение корзины и отключение автозакрытия заказа

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

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

Чтобы диагностировать проблему, проверьте:

  • Сколько записей в таблице wp_woocommerce_sessions и wp_posts с типом 'shop_order' и статусами 'pending', 'failed'.
  • Наличие плагинов, которые управляют сессиями или заказами.
  • Сколько времени хранится корзина и как настроено время сессии WooCommerce (wc_session_expiring и wc_session_expiration в куках).

Пошаговое решение: автоматическое очищение корзины и отключение автозакрытия заказов

1. Очистка брошенных корзин с помощью WP-Cron

Добавим функцию, которая удаляет устаревшие сессии WooCommerce и заказы со статусом pending старше определённого времени.

add_action('wp', function() {
    if (!wp_next_scheduled('custom_cleanup_woocommerce_sessions')) {
        wp_schedule_event(time(), 'hourly', 'custom_cleanup_woocommerce_sessions');
    }
});

add_action('custom_cleanup_woocommerce_sessions', function() {
    global $wpdb;
    // Удаляем сессии старше 48 часов
    $expiration = time() - 48 * HOUR_IN_SECONDS;
    $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_wc_session_%%' AND option_value LIKE %s",
            '%' . gmdate('Y-m-d H:i:s', $expiration) . '%'
        )
    );

    // Удаляем заказы в статусе pending старше 48 часов
    $orders = wc_get_orders([
        'limit' => -1,
        'status' => 'pending',
        'date_created' => '<' . (new WC_DateTime('@' . $expiration))->format('Y-m-d H:i:s'),
        'return' => 'ids',
    ]);
    foreach ($orders as $order_id) {
        wp_trash_post($order_id);
    }
});

2. Отключение автоматического автозакрытия заказов в WooCommerce

WooCommerce не закрывает заказы автоматически, если не настроено дополнительно. Однако некоторые плагины или кастомный код могут добавлять такую логику. Чтобы гарантированно отключить автозакрытие, можно использовать фильтр 'woocommerce_auto_cancel_pending_orders_interval' и вернуть false, чтобы отмена не происходила.

add_filter('woocommerce_auto_cancel_pending_orders_interval', '__return_false');

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

  • Запустите вручную cron-задачу через WP-CLI: wp cron event run custom_cleanup_woocommerce_sessions.
  • Проверьте таблицу wp_options, что записи сессий старше 48 часов удалены.
  • В админке WooCommerce проверьте, что заказы со статусом pending старше 48 часов переместились в корзину или удалены.
  • Создайте заказ и оставьте в статусе pending, через 2 дня он не должен быть отменён автоматически.

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

  • Ошибка: WP-Cron не запускается автоматически.
    Решение: Настройте системный cron на сервере или используйте плагин WP Crontrol для ручного запуска.
  • Ошибка: Сессии не удаляются.
    Причина: Неправильный SQL-запрос или использование устаревшего префикса таблиц.
    Решение: Используйте $wpdb->options и проверяйте префикс базы, корректируйте под вашу установку.
  • Ошибка: Автоматическое закрытие заказов всё ещё происходит.
    Решение: Проверьте дополнительные плагины и их настройки, ищите хук woocommerce_auto_cancel_pending_orders_interval или кастомный код.

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

  • Не удаляйте сессии слишком часто, это может привести к проблемам с пользователями, которые возвращаются в корзину.
  • Для больших интернет-магазинов используйте отдельный системный cron для запуска WP-Cron, чтобы избежать задержек.
  • Храните резервные копии базы данных перед массовым удалением заказов и сессий.
  • По возможности используйте плагин Clearfy Pro (ссылка) для расширенной оптимизации и управления сессиями WooCommerce.
Максимальная длина URL в WordPress и методы управления
17.03.2026
Автоматическое изменение цен в WooCommerce по расписанию
09.06.2026
Как удалить неиспользуемые теги в WordPress
11.02.2026
Как автоматизировать создание изображений в WordPress при загрузке
23.03.2026
WooCommerce: автоматическое очищение корзины и отключение автозакрытия заказа
12.07.2026

Сайт в разработке, скоро здесь будет портал о WordPress.