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

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

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

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

Определите, есть ли проблема с неочищенными корзинами:

  • Подключитесь к базе данных через phpMyAdmin или аналог.
  • Выполните SQL-запрос для подсчёта текущих сессий корзин:
    SELECT COUNT(*) FROM wp_woocommerce_sessions;
  • Обратите внимание на дату последнего обновления сессий:
    SELECT session_id, session_expiry FROM wp_woocommerce_sessions ORDER BY session_expiry ASC LIMIT 10;

Если в таблице много записей со сроком действия давно истёкшим, это подтверждает проблему.

Как работает хранение корзин в WooCommerce

WooCommerce использует таблицу wp_woocommerce_sessions для хранения данных корзин пользователей (сессий). В ней есть поля:

  • session_id — идентификатор сессии;
  • session_expiry — метка времени, когда сессия должна истечь;
  • session_value — сериализованные данные корзины.

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

Пошаговое решение: удаляем неактивные корзины по срокам через WP Cron

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

function wc_delete_expired_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $current_time = time();
    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $current_time
    ));
    return $deleted;
}

2. Регистрируем WP Cron-задачу для периодической очистки

add_action('wc_delete_expired_sessions_hook', 'wc_delete_expired_sessions');

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

3. Очистка при деактивации плагина/темы

function wc_clear_scheduled_expired_sessions_cleanup() {
    $timestamp = wp_next_scheduled('wc_delete_expired_sessions_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wc_delete_expired_sessions_hook');
    }
}
register_deactivation_hook(__FILE__, 'wc_clear_scheduled_expired_sessions_cleanup');

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

Чтобы убедиться, что удаление работает:

  • Подождите несколько часов после добавления кода.
  • Снова выполните SQL-запрос для подсчёта сессий:
    SELECT COUNT(*) FROM wp_woocommerce_sessions;
  • Количество устаревших сессий должно уменьшиться.
  • Проверьте логи сервера (если есть) на наличие ошибок выполнения WP Cron.

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

  • WP Cron не срабатывает: На некоторых хостингах WP Cron работает только при посещении сайта. Для гарантированной работы настройте системный cron на вызов wp-cron.php.
  • Неправильный префикс таблиц: Убедитесь, что используете правильный префикс в $wpdb->prefix, особенно если он был изменён в настройках WordPress.
  • Удаление не происходит: Проверьте права пользователя базы данных – он должен иметь права DELETE.
  • Ошибки синтаксиса: Копируйте код внимательно, особенно кавычки и точки с запятой.

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

  • Выполняйте удаление неактивных корзин с интервалом не чаще одного раза в час, чтобы не перегружать базу.
  • Добавьте логирование действий удаления, чтобы отслеживать сколько записей удаляется и когда.
  • Перед массовым удалением сделайте резервную копию базы.
  • Для больших магазинов можно расширить логику — удалять сессии старше, например, 30 дней, а более свежие оставлять.

Сравнение вариантов удаления неактивных корзин

МетодПлюсыМинусы
WP Cron + SQL DELETE (код)Гибкость, не требует плагинов, можно настроить сроки и логикуЗависит от работы WP Cron, требует навыков программирования
Плагины очистки базыПростота использования, готовые функции очисткиМожет быть избыточным, лишние зависимости, менее гибко
Ручная очистка через phpMyAdminПолный контроль, быстроРиски ошибок, требует регулярного вмешательства
WooCommerce: автоматическое удаление закрытых и неактивных заказов через код
31.05.2026
Автоматическое создание и обновление картинок для социальных сетей в WordPress с помощью AI
13.01.2026
Автоматический анализ изображений в WordPress с помощью AI: практическое руководство
08.04.2026
Как создать автоматические заголовки для постов в WordPress с помощью AI
04.03.2026
Автоматизация управления ролями в WordPress с помощью AI
01.04.2026