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

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

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

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

Как определить, что корзина заброшена?

В WooCommerce корзина хранится в пользовательской сессии и в базе данных (таблица wp_woocommerce_sessions). Заброшенной считается корзина, в которой пользователь не совершил оплату и не возвращался в течение определённого времени (например, 24 часа).

Для диагностики можно проверить содержимое таблицы сессий и дату последнего обновления:

SELECT session_key, session_value, session_expiry FROM wp_woocommerce_sessions ORDER BY session_expiry ASC;

Если в таблице много записей с устаревшими session_expiry, значит корзины не очищаются.

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

1. Создаем WP-Cron задачу для удаления старых сессий

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

add_action('wp_loaded', function() {
    if (!wp_next_scheduled('wc_cleanup_abandoned_carts')) {
        wp_schedule_event(time(), 'hourly', 'wc_cleanup_abandoned_carts');
    }
});

add_action('wc_cleanup_abandoned_carts', function() {
    global $wpdb;
    $expiration_time = time(); // текущее время UNIX
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $deleted = $wpdb->query($wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $expiration_time
    ));
});

Этот код создаёт ежечасное событие, которое удаляет все сессии, срок действия которых истек (то есть корзины, которые не обновлялись).

2. Настраиваем время истечения сессий WooCommerce

По умолчанию срок действия сессии WooCommerce — 48 часов. Можно уменьшить этот промежуток, чтобы корзины быстрее удалялись.

add_filter('wc_session_expiring', function($seconds) {
    return 3600 * 12; // 12 часов
});

add_filter('wc_session_expiration', function($seconds) {
    return 3600 * 24; // 24 часа
});

Первый фильтр — время предупреждения об окончании сессии, второй — её полное истечение.

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

  • Через базу данных проверить таблицу wp_woocommerce_sessions: записи с устаревшим session_expiry должны удаляться.
  • Создать тестовую корзину, не оформлять заказ, подождать больше 24 часов, проверить — корзина исчезла.
  • Мониторить нагрузку и количество записей в таблице сессий до и после внедрения, чтобы убедиться в уменьшении заброшенных корзин.

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

  • Нет срабатывания WP-Cron: На некоторых хостингах WP-Cron работает только при заходе на сайт. Для гарантированной работы настроить системный cron с вызовом wget -q -O - https://example.com/wp-cron.php?doing_wp_cron.
  • Удаление активных сессий: Не стоит уменьшать время жизни сессий слишком сильно, иначе активные пользователи потеряют корзину.
  • Неправильный префикс таблиц: В коде используйте $wpdb->prefix, чтобы избежать ошибок с префиксами баз данных.
  • Повторное создание cron задачи: Проверяйте наличие задачи через wp_next_scheduled, чтобы не создавать дубли.

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

  • Удаление старых сессий уменьшает нагрузку на базу данных и помогает избежать замедления запросов к таблице wp_woocommerce_sessions.
  • Регулярно проверяйте логи сервера на ошибки cron для своевременного исправления.
  • Если магазин большой — рассмотрите использование внешних систем для сбора статистики и аналитики по заброшенным корзинам, чтобы не перегружать базу.
  • Перед внесением изменений сделайте бэкап базы.

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

МетодОписаниеПлюсыМинусы
Код с WP-CronУдаление устаревших сессий через собственный cronЛегко кастомизировать, бесплатно, без плагиновЗависит от работы WP-Cron, нужно контролировать
Плагин (например, Abandoned Cart Lite)Готовые решения с настройками и интеграциямиПростота установки, дополнительные функцииМожет нагружать сайт, лишний код
Внешние сервисыОтслеживание через сторонние платформыУглубленная аналитика, email-уведомленияПлатно, зависит от сторонних сервисов
Решение проблемы с отображением корзины в WooCommerce при использовании кэширования
08.05.2026
Решение проблемы с неработающим фильтром товаров WooCommerce по атрибутам
05.05.2026
Оптимизация WordPress для быстрой загрузки сайта
05.11.2025
Как удалить или отключить Emoji в WordPress для ускорения сайта
23.01.2026
Как создать дерево категорий в WordPress с помощью кода
19.11.2025