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

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

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

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

В WooCommerce корзина хранится в сессиях пользователей и в таблице wp_woocommerce_sessions. Чтобы проверить, сколько сессий сейчас активно и сколько из них содержат корзину, используйте следующий SQL-запрос (через phpMyAdmin или WP CLI):

SELECT COUNT(*) AS total_sessions FROM wp_woocommerce_sessions;

Чтобы узнать, сколько сессий старше, например, 7 дней, выполните:

SELECT COUNT(*) AS old_sessions FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));

Если количество устаревших сессий большое — пора настроить автоматическое удаление.

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

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

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

function wpfactory_clear_old_woocommerce_sessions() {
    global $wpdb;
    $seven_days_ago = time() - 7 * DAY_IN_SECONDS;
    $table = $wpdb->prefix . 'woocommerce_sessions';

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

    return $deleted;
}

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

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

// Запускаем функцию при срабатывании крон задачи
add_action('wpfactory_daily_clear_sessions', 'wpfactory_clear_old_woocommerce_sessions');

3. Удаляем крон задачу при деактивации (если в плагине)

function wpfactory_unschedule_clear_sessions() {
    $timestamp = wp_next_scheduled('wpfactory_daily_clear_sessions');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpfactory_daily_clear_sessions');
    }
}

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

1. Вручную запустите функцию очистки для проверки (например, через WP-CLI):

wp eval 'echo wpfactory_clear_old_woocommerce_sessions();'

Вывод — количество удалённых записей. Если число больше нуля, очистка работает.

2. Через phpMyAdmin проверьте таблицу wp_woocommerce_sessions: количество записей должно уменьшиться после запуска.

3. Убедитесь, что больше нет накопления сессий старше 7 дней, повторив SQL-запросы из раздела диагностики.

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

  • Неверное имя таблицы: в мультисайтовой установке префикс таблиц может отличаться; используйте $wpdb->prefix для универсальности.
  • Функция не запускается автоматически: WP Cron запускается при посещении сайта. Для сайтов с низким трафиком настройте системный cron на вызов wp-cron.php.
  • Удаляются нужные сессии: проверьте, что условие session_expiry < $seven_days_ago корректно, чтобы не удалять актуальные корзины.
  • Проблемы с правами базы данных: убедитесь, что пользователь БД имеет права DELETE для таблицы wp_woocommerce_sessions.

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

  • Удаление сессий напрямую из базы — эффективный способ, но выполняйте бэкап базы перед внедрением.
  • Используйте WP Cron для регулярного запуска, но на высоконагруженных сайтах лучше настроить системный cron для стабильности.
  • Не уменьшайте интервал очистки меньше 1 дня, чтобы не ухудшить пользовательский опыт.
  • Чтобы убедиться в безопасности, не удаляйте другие таблицы WooCommerce и не трогайте таблицы с заказами и пользователями.

Таблица сравнения методов удаления забытых корзин

МетодПреимуществаНедостаткиПример использования
WP Cron + SQL DELETEПолный контроль, не требует плагинов, гибкость настройки интервалаЗависимость от посещаемости сайта, требует навыков SQLКод из статьи
Плагины очистки сессийУдобство настройки, визуальный интерфейсМожет быть избыточным, нагрузка на сайт, сторонний кодWooCommerce Session Cleaner
Ручное удаление через phpMyAdminПростота при единичных очисткахРиск ошибок, не автоматизированоSQL-запросы из раздела диагностики
Как создать автоматическую резервную копию WordPress с помощью WPRemark
20.02.2026
Как использовать WPRemark для автоматического создания резервных копий WordPress
22.03.2026
Как отключить Emoji в WordPress для ускорения сайта и улучшения производительности
06.12.2025
Как создать собственный шорткод в WordPress
06.11.2025
Автоматическое создание Sitemap в WordPress с поддержкой Multisite
09.02.2026