WooCommerce: как автоматически удалять старые корзины покупателей

Диагностика проблемы: почему нужно очищать старые корзины в WooCommerce

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

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

Пошаговое решение: автоматическая очистка старых корзин по времени

1. Добавление кастомного cron-задания для удаления старых сессий

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

Добавьте следующий код в functions.php вашей темы или в отдельный плагин:

function wc_clear_old_cart_sessions() {
    global $wpdb;
    // Время в секундах (7 дней)
    $expiration = 7 * DAY_IN_SECONDS;
    $threshold = time() - $expiration;

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

    // Удаляем записи, где session_expiry меньше текущего времени минус 7 дней
    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $table WHERE session_expiry < %d",
            $threshold
        )
    );

    if ( false === $deleted ) {
        error_log('WooCommerce: Ошибка при удалении старых сессий корзины');
    } else {
        error_log("WooCommerce: Удалено старых сессий корзины: $deleted");
    }
}

// Регистрируем событие cron, если его нет
if ( ! wp_next_scheduled( 'wc_clear_old_cart_sessions_hook' ) ) {
    wp_schedule_event( time(), 'daily', 'wc_clear_old_cart_sessions_hook' );
}

// Привязываем функцию к крону
add_action( 'wc_clear_old_cart_sessions_hook', 'wc_clear_old_cart_sessions' );

2. Оптимизация удаления: через WP CLI (опционально)

Если у вас есть доступ к WP CLI, можно запускать удаление вручную или по расписанию через системный cron, например:

wp eval 'wc_clear_old_cart_sessions();'

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

Чтобы проверить, что очистка работает:

  • Посмотрите логи ошибок сервера или wp-content/debug.log (если включен WP_DEBUG_LOG) на наличие сообщений об удалении сессий.
  • Подключитесь к базе данных и выполните запрос до и после запуска cron:
SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));

Количество записей должно уменьшаться после выполнения задачи.

Также можно вручную вызвать функцию в functions.php или через WP CLI и проверить, сколько записей было удалено.

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

  • Крон не срабатывает: проверьте, активен ли WP Cron. Если используется системный cron, убедитесь, что wp-cron.php вызывается регулярно.
  • Неправильное имя таблицы: если у вас нестандартный префикс базы данных, замените $wpdb->prefix на ваш префикс.
  • Права на удаление: убедитесь, что пользователь базы данных имеет права DELETE для таблицы wp_woocommerce_sessions.
  • Кэш: при использовании плагинов кэширования убедитесь, что они не мешают обновлению данных корзины.

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

  • Регулярно очищайте не только корзины, но и устаревшие сессии, чтобы база не разрасталась.
  • Для магазинов с высокой нагрузкой лучше отключить WP Cron и настроить системный cron на вызов wp-cron.php каждые 5-10 минут.
  • Рекомендуется делать резервные копии базы перед внедрением автоматических удалений.
  • Мониторьте нагрузку на базу данных после внедрения, чтобы убедиться в положительном эффекте.
  • Если хотите более гибкий контроль, используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wptemplates.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-staroj-korziny) для автоматической очистки и оптимизации WooCommerce.

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

МетодОписаниеПлюсыМинусы
Кастомный WP Cron с SQL-запросомУдаление записей напрямую из таблицы сессийПолный контроль, гибкость, бесплатноТребует навыков, риск ошибок при SQL
WP CLI вызов функцииРучной или системный cron запуск удаленияБыстрый запуск, подходит для администраторовТребует доступа к серверу и WP CLI
Плагин Clearfy ProАвтоматизация и расширенные настройки очисткиПростота, поддержка, дополнительные функции оптимизацииПлатный, зависит от стороннего продукта
Как отключить редактор Gutenberg в WordPress 5.9: практические способы и примеры
08.03.2026
Как использовать фильтр pre_get_posts в WordPress для кастомизации запросов
06.12.2025
WooCommerce: как отключить автоматический пересчет стоимости товаров в корзине
30.06.2026
Как удалить пустые категории в WordPress с помощью кода и плагинов
13.04.2026
WooCommerce: автоматическое удаление старых корзин покупателей по срокам
30.07.2026