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

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

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

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

Проверить наличие старых сессий можно напрямую через базу данных:

SELECT * FROM wp_woocommerce_sessions ORDER BY session_expiry DESC LIMIT 10;

Если в таблице много записей с истекшим временем (session_expiry меньше текущего времени), значит устаревшие корзины не удаляются. Это может замедлять запросы и увеличивать размер БД.

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

1. Добавляем кастомную функцию для очистки сессий

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

function wc_delete_expired_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $now = time();

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

    if ( defined('WP_DEBUG') && WP_DEBUG ) {
        error_log("WooCommerce: удалено $deleted устаревших сессий.");
    }
}

2. Запускаем функцию через WP-Cron

Чтобы функция вызывалась регулярно, добавим крон-задачу:

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

add_action( 'wc_cleanup_expired_sessions', 'wc_delete_expired_sessions' );

Этот код создаст задачу, которая будет запускаться каждый час и удалять устаревшие сессии.

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

  • Подождите час после добавления кода или запустите задачу вручную через WP-Cron (например, с помощью плагина WP Crontrol).
  • Проверьте таблицу wp_woocommerce_sessions в базе данных — количество устаревших записей должно уменьшиться.
  • При включённом WP_DEBUG смотрите лог ошибок для записи об удалении сессий.

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

  • Код не запускается по расписанию: Проверьте, что WP-Cron работает корректно, и на сайте есть трафик для его запуска. Для теста можно использовать плагин WP Crontrol.
  • Удаляются не только пустые корзины, а все сессии: WooCommerce хранит сессии только для корзин, поэтому удаление по времени expiry — безопасно.
  • Ошибка доступа к базе данных: Проверьте префикс таблицы $wpdb->prefix и права пользователя БД.

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

  • Не запускайте очистку сессий чаще, чем раз в час, чтобы не нагружать базу.
  • Резервное копирование базы данных перед внесением изменений — обязательный шаг.
  • Если магазин большой, можно увеличить интервал запуска до нескольких часов или запускать вручную через WP-CLI.

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

МетодОписаниеПлюсыМинусы
Плагин (например, WP Rocket или специальные WooCommerce плагины)Использование готовых решений для очистки и оптимизации базыПростота установки, дополнительные функцииЗависимость от сторонних разработчиков, нагрузка
Кастомный код с WP-CronРеализация через свой код и штатный WP-CronПолный контроль, отсутствие лишних плагиновНеобходимость ручного контроля, возможные ошибки в коде
Ручная очистка SQL запросамРазовые или регулярные ручные операции в базе данныхТочный контрольРиск ошибок, требуется доступ к БД, неудобно
Оптимизация памяти и управление использованием памяти в WordPress
08.04.2026
Как использовать Transients в WordPress для кэширования данных
28.02.2026
WooCommerce: как автоматически удалять старые открытые заказы
23.06.2026
Как настроить отложенный запуск задач в WordPress без Cron
14.01.2026
Как эффективно использовать wp_enqueue_style и wp_enqueue_script в WordPress
26.03.2026