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

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

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

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

Для начала нужно понять, сколько таких корзин сохраняется и как долго они хранятся. Для этого:

  • Подключитесь к базе данных и выполните запрос к таблице wp_woocommerce_sessions (префикс может отличаться).
  • Проверьте дату последнего обновления сессий (поле session_expiry).
  • Если сессии хранятся более 48 часов и их много — пора очистить.
SELECT COUNT(*) AS count, AVG(session_expiry - UNIX_TIMESTAMP(NOW())) AS avg_expiry FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(NOW());

Если count больше 1000, а среднее время хранения превышает 2 суток — это негативно влияет на сайт.

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

1. Настроить WP-Cron задачу для очистки сессий

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

2. Добавить кастомный обработчик очистки в functions.php

function wpfactory_clear_expired_woocommerce_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $now = time();
    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $table WHERE session_expiry < %d",
            $now
        )
    );
    if ( defined('WP_DEBUG') && WP_DEBUG ) {
        error_log('WooCommerce sessions cleared: ' . $deleted);
    }
}

// Регистрируем крон-задачу
add_action('wpfactory_clear_expired_sessions_hook', 'wpfactory_clear_expired_woocommerce_sessions');

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

3. Проверка работы задачи

Через час после добавления кода проверьте в error_log (если включен WP_DEBUG), сколько записей удалено. Также:

  • Посмотрите количество записей в wp_woocommerce_sessions до и после.
  • Убедитесь, что сайт не начал выдавать ошибки при работе с корзиной.

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

Для проверки:

  • Выполните SQL-запрос для подсчёта сессий с истекшим временем:
SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(NOW());

Если результат 0 — задача успешно очистила забытые корзины.

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

  • Ошибка: WP-Cron не запускается автоматически.
    Решение: Убедитесь, что на сервере есть посещения сайта, либо настройте системный cron для wp-cron.php.
  • Ошибка: Код в functions.php вызывает фатальную ошибку.
    Решение: Проверьте правильность синтаксиса и наличие глобальной переменной $wpdb.
  • Ошибка: Удаляются активные сессии.
    Решение: Убедитесь, что условие удаления — только сессии с session_expiry меньше текущего времени.

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

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

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

МетодПлюсыМинусы
Плагин очистки сессийПрост в установке, готовые настройкиМожет замедлять сайт, лишние зависимости
Кастомный код с WP-Cron (как в статье)Легкий, гибкий, без сторонних плагиновТребует технических знаний и контроля cron
Ручное удаление через SQLМгновенно, полный контрольРиск ошибок, неавтоматизировано
Как использовать хуки в WordPress: практическое руководство
19.11.2025
Как создать автоматические отзывы в WordPress с помощью плагинов и кода
29.12.2025
Как использовать хук WooCommerce для обновления метаданных заказа на этапе оформления
22.04.2026
Как создать автоматическую резервную копию WordPress с помощью WPRemark
20.02.2026
Автоматическое создание Sitemap в WordPress с поддержкой Multisite
09.02.2026