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

Что такое корзины (сессии) в WooCommerce и зачем их удалять

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

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

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

Диагностика накопления старых сессий WooCommerce

Для начала проверьте, сколько сессий хранится в базе. Для этого можно выполнить SQL-запрос напрямую через phpMyAdmin или консоль:

SELECT COUNT(*) AS total_sessions FROM wp_woocommerce_sessions;

Если число сессий превышает сотни тысяч, это сигнал к необходимости очистки.

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

SELECT session_id, session_expiry FROM wp_woocommerce_sessions ORDER BY session_expiry ASC LIMIT 10;

Это покажет самые старые сессии и их время истечения.

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

WooCommerce хранит сессии в таблице wp_woocommerce_sessions с полем session_expiry — время истечения сессии в формате UNIX timestamp. Чтобы удалить устаревшие сессии, нужно удалить записи с session_expiry меньше текущего времени.

Добавим функцию, которая будет запускаться раз в сутки с помощью WP-Cron и удалять просроченные сессии.

Код для удаления просроченных сессий

function wptemp_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 (false === $deleted) {
        error_log('Ошибка при удалении просроченных сессий WooCommerce');
    } else {
        error_log('Удалено ' . $deleted . ' просроченных сессий WooCommerce');
    }
}

// Планируем запуск задачи раз в сутки
if (!wp_next_scheduled('wptemp_daily_clear_woocommerce_sessions')) {
    wp_schedule_event(time(), 'daily', 'wptemp_daily_clear_woocommerce_sessions');
}
add_action('wptemp_daily_clear_woocommerce_sessions', 'wptemp_clear_expired_woocommerce_sessions');

Где разместить код

Добавьте этот код в файл functions.php вашей дочерней темы или в кастомный плагин.

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

  • Подождите сутки или вызовите задачу вручную через WP-CLI: wp cron event run wptemp_daily_clear_woocommerce_sessions
  • Проверьте логи ошибок сервера или файл debug.log, если включен WP_DEBUG_LOG — там появится запись о том, сколько сессий удалено
  • Повторите SQL-запрос на подсчет сессий до и после запуска, чтобы убедиться в очистке

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

  • Ошибка: WP-Cron не запускается автоматически
    Причина: отсутствие трафика или отключён WP-Cron в wp-config.php. Решение: либо настроить системный Cron, либо запускать задачи вручную через WP-CLI.
  • Ошибка: ошибка при выполнении DELETE запроса
    Причина: неправильное имя таблицы, префикс отличается от wp_. Решение: проверить значение $wpdb->prefix и подставить корректный префикс.
  • Удаляются не все старые сессии
    Причина: некоторые сессии имеют дату истечения в будущем. Решение: это нормально, удаляем только просроченные записи.

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

  • Очищайте сессии регулярно — это поможет избежать избыточного роста таблицы и обеспечит стабильность сайта.
  • Отключайте WP-Cron в высоконагруженных проектах и используйте системный Cron для надежного запуска задач.
  • Логируйте удаление сессий для мониторинга и быстрого выявления проблем.
  • Не удаляйте сессии вручную в рабочее время — планируйте задачи на время с минимальной нагрузкой.

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

СпособПлюсыМинусыКомпромисс
Плагин для очистки сессийПростой в использовании, интерфейс настройкиДополнительная нагрузка, риск конфликтовИспользовать проверенные плагины, например WP-Optimize
Кастомный код с WP-CronЛегкий, не требует сторонних плагинов, гибкийТребует базовых знаний разработки, настройка CronОптимальный вариант для разработчиков
Ручное удаление через SQLМгновенный эффектРиск удаления нужных данных, требует доступа к БДИспользовать только для экстренных случаев
Автоматическое удаление старых корзин (сессий) в WooCommerce без плагинов
20.06.2026
Как использовать хуки для изменения функционала WordPress
25.11.2025
Как избежать проблемы с безопасностью при использовании WP REST API в WordPress
03.07.2026
Как настроить фильтры в WP REST API для сложных запросов
11.04.2026
Как удалить и оптимизировать базу данных WooCommerce без плагинов
04.05.2026