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

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

В WooCommerce при добавлении товаров в корзину данные сохраняются в сессии пользователя и базе данных (таблица wp_woocommerce_sessions). Если покупатель не завершил заказ, корзина остается "забытой". При большом количестве таких корзин база растет, что может замедлять работу сайта и усложнять анализ актуальных заказов.

Признаки проблемы:

  • Значительный рост размера таблицы wp_woocommerce_sessions в базе данных.
  • Задержка при оформлении заказа или загрузке страниц с корзиной.
  • Старые сессии пользователей, которые уже не актуальны.

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

1. Создаем кастомную функцию для очистки устаревших сессий

WooCommerce хранит данные сессий в базе и по умолчанию не удаляет их немедленно. Мы можем использовать WP Cron для регулярного удаления сессий старше определенного времени.

function wc_clear_expired_cart_sessions() {
    global $wpdb;
    $session_lifetime = 2 * DAY_IN_SECONDS; // время жизни сессии 2 дня
    $time_limit = time() - $session_lifetime;

    // Таблица сессий WooCommerce
    $table = $wpdb->prefix . 'woocommerce_sessions';

    // Удаляем сессии с meta_value (сериализованные данные) с timestamp ниже заданного
    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $time_limit
    ));

    return $deleted;
}

2. Добавляем WP Cron задачу для автоматизации

Добавим расписание, которое будет запускать очистку раз в день.

// Регистрируем событие при активации темы или плагина
function wc_schedule_cart_cleanup() {
    if ( ! wp_next_scheduled( 'wc_daily_cart_cleanup' ) ) {
        wp_schedule_event( time(), 'daily', 'wc_daily_cart_cleanup' );
    }
}
add_action( 'wp', 'wc_schedule_cart_cleanup' );

// Запускаем функцию очистки по крону
add_action( 'wc_daily_cart_cleanup', 'wc_clear_expired_cart_sessions' );

// Отключаем крон при деактивации
function wc_unschedule_cart_cleanup() {
    $timestamp = wp_next_scheduled( 'wc_daily_cart_cleanup' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wc_daily_cart_cleanup' );
    }
}

3. Тестовый запуск функции вручную

Для проверки можно вызвать функцию из консоли или добавить временный вызов в functions.php:

add_action('init', function() {
    if ( current_user_can('administrator') && isset($_GET['clear_cart_sessions']) ) {
        $deleted = wc_clear_expired_cart_sessions();
        echo "Удалено старых сессий: " . intval($deleted);
        exit;
    }
});

После запуска перейдите по URL https://your-site.com/?clear_cart_sessions=1 (только под админом) и убедитесь, что функция выполнена.

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

  • Мониторьте размер таблицы wp_woocommerce_sessions через phpMyAdmin или консоль базы данных.
  • Проверяйте логи WP Cron (плагины типа WP Crontrol помогут увидеть расписание).
  • Убедитесь, что старая корзина не отображается у пользователей спустя 2 дня.

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

  • Функция не удаляет сессии: проверьте имя таблицы и наличие поля session_expiry. В некоторых версиях WooCommerce поле может называться иначе или использоваться другая логика хранения сессий.
  • WP Cron не запускается: на некоторых хостингах WP Cron требует внешних вызовов (wp-cron.php). Используйте системный cron или плагин WP Crontrol для отладки.
  • Удалены активные корзины: уменьшите значение $session_lifetime, чтобы не удалять сессии слишком рано.

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

  • Регулярно очищайте не только сессии, но и транзиенты WooCommerce для уменьшения нагрузки.
  • Используйте плагин Clearfy Pro для автоматизации очистки и оптимизации базы без риска удаления нужных данных (https://wpshop.ru/plugins/clearfy).
  • Ограничьте доступ к отладочным URL с очищением сессий только администраторам для безопасности.

Сравнение вариантов автоматической очистки корзин

МетодПлюсыМинусыПример кода/Плагин
Ручной SQL-запрос Простота, быстрый эффект Риск ошибки, требует доступа к БД DELETE FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP();
WP Cron + кастомная функция Автоматизация, гибкость Зависит от работы WP Cron, требует поддержки кода Код из статьи
Плагин Clearfy Pro Готовое решение, безопасность, поддержка Платный, дополнительный вес плагина Clearfy Pro
Как решить проблему с обновлением метаданных заказа в WooCommerce
02.06.2026
Автоматическое удаление старых записей в WordPress
22.03.2026
Как добавить автоматический отзыв в WordPress с помощью Expert Review
24.02.2026
Как правильно настроить WooCommerce для продавцов с разным уровнем доступа
17.04.2026
Как создать автоматические отзывы в WordPress с помощью плагинов и кода
29.12.2025