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

Диагностика проблемы: почему товары остаются в корзине

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

Основные причины:

  • Отсутствие автоматического удаления устаревших корзин;
  • Неправильная настройка сессий WooCommerce;
  • Кеширование страниц магазина мешает обновлению корзины;
  • Плагины, которые блокируют очистку корзины.

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

1. Добавление кода для удаления устаревших товаров в корзине

В WooCommerce нет штатного способа автоматической очистки корзины через заданный промежуток. Реализуем это с помощью WP Cron и пользовательской функции:

function wplancer_clear_abandoned_carts() {
    if ( ! class_exists('WooCommerce') ) {
        return;
    }

    global $wpdb;
    // Получаем все сессии пользователей
    $sessions = $wpdb->get_results("SELECT session_key, session_value, session_expiry FROM {$wpdb->prefix}woocommerce_sessions");
    $expiration_time = 60 * 60 * 24; // 24 часа
    $now = time();

    foreach ($sessions as $session) {
        if ($now - $session->session_expiry > $expiration_time) {
            // Разбираем данные сессии
            $data = maybe_unserialize($session->session_value);
            if (isset($data['cart']) && !empty($data['cart'])) {
                // Очищаем корзину
                $data['cart'] = [];
                $new_value = maybe_serialize($data);
                $wpdb->update(
                    "{$wpdb->prefix}woocommerce_sessions",
                    ['session_value' => $new_value],
                    ['session_key' => $session->session_key]
                );
            }
        }
    }
}

// Планируем задачу при инициализации
add_action('init', function() {
    if (!wp_next_scheduled('wplancer_clear_abandoned_carts_hook')) {
        wp_schedule_event(time(), 'hourly', 'wplancer_clear_abandoned_carts_hook');
    }
});

// Хук для очистки
add_action('wplancer_clear_abandoned_carts_hook', 'wplancer_clear_abandoned_carts');

2. Отмена задания при деактивации темы или плагина

function wplancer_clear_abandoned_carts_deactivation() {
    $timestamp = wp_next_scheduled('wplancer_clear_abandoned_carts_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wplancer_clear_abandoned_carts_hook');
    }
}

register_deactivation_hook(__FILE__, 'wplancer_clear_abandoned_carts_deactivation');

Как проверить, что решение работает

  • Добавьте товар в корзину, закройте браузер и подождите более 24 часов (или измените $expiration_time на меньший интервал для теста);
  • Зайдите под тем же пользователем — корзина должна быть пустой;
  • В базе данных в таблице wp_woocommerce_sessions проверьте, что записи с устаревшими сессиями обновились;
  • Для отладки можно временно добавить логирование в функцию очистки.

Частые ошибки и их устранение

  • Задача WP Cron не запускается: по умолчанию WP Cron срабатывает только при посещении сайта. Для надёжной работы настройте системный cron или используйте сторонние сервисы.
  • Неправильное время проверки сессий: значение $expiration_time должно соответствовать вашей бизнес-логике.
  • Кеширование страниц корзины: если установлены кеширующие плагины (например, WP Super Cache, W3 Total Cache), исключите страницы корзины и оформления заказа из кеша.
  • Проблемы с сериализацией: всегда используйте maybe_serialize и maybe_unserialize для работы с данными сессий WooCommerce.

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

  • Не запускайте очистку сессий слишком часто — оптимально 1 раз в час или в день, чтобы не нагружать базу.
  • Не удаляйте сессии пользователей, которые недавно заходили — учитывайте время последнего обновления сессии.
  • Обязательно исключайте страницы корзины и оформления из кеширования для корректной работы WooCommerce.
  • Используйте специализированные плагины для управления оставленными корзинами, если нужны расширенные функции (например, напоминания по email), но для простой очистки код выше эффективен и не нагружает сайт.

Сравнение способов автоматической очистки корзины в WooCommerce

МетодПлюсыМинусыПример
Код на WP Cron (как в статье) Полный контроль, бесплатно, лёгкая настройка Требует базовых знаний, зависит от WP Cron Пример кода выше
Плагины для abandoned cart Расширенный функционал (напоминания, отчёты) Может создавать нагрузку, требует настройки Clearfy Pro (опционально)
Ручная очистка сессий в базе Простота, не требует кода Нужно админское вмешательство, риск ошибок SQL запросы в phpMyAdmin
Как создать собственный виджет в WordPress с примерами кода
12.12.2025
Как создать нестандартные типы постов с аксессуарами в WordPress
28.01.2026
Как автоматически удалять зависшие сеансы пользователей в WordPress
18.07.2026
Как создать автоматические записи с обновляемым контекстом в WordPress
02.04.2026
Как создать автоматическую оптимизацию изображений в WordPress
21.02.2026