Как автоматически удалить забытые корзины в WooCommerce с помощью кода

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

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

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

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

  • Проверьте таблицу wp_woocommerce_sessions в базе данных — она хранит данные сессий, включая корзины.
  • Обратите внимание на количество записей и дату их последнего обновления — старые сессии обычно соответствуют забытым корзинам.
  • Используйте плагин WooCommerce Cart Reports или подобные для визуального контроля активности корзин.

Пошаговое решение: удаление забытых корзин с помощью PHP-кода

WooCommerce хранит данные корзин в таблице wp_woocommerce_sessions. Для удаления забытых корзин нужно удалить сессии, которые не обновлялись определённое время (например, 24 часа). Ниже приведён пример кода, который можно добавить в файл functions.php вашей темы или создать небольшой плагин для автоматизации задачи.

function wpfactory_delete_expired_woocommerce_sessions() {
    global $wpdb;
    $expiration = 24 * 60 * 60; // 24 часа в секундах
    $time_limit = time() - $expiration;

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

    // Удаляем сессии, которые не обновлялись более 24 часов
    $result = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $table WHERE session_expiry < %d",
            $time_limit
        )
    );

    if ($result !== false) {
        error_log("Удалено забытых корзин: " . $result);
    }
}
// Запускаем очистку при запуске Cron задачи
add_action('wpfactory_daily_cleanup', 'wpfactory_delete_expired_woocommerce_sessions');

// Регистрируем Cron задачу, если её ещё нет
if (!wp_next_scheduled('wpfactory_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpfactory_daily_cleanup');
}

Этот код создаёт ежедневную Cron-задачу, которая удаляет все сессии старше 24 часов. Можно настроить интервал и время удаления, изменив переменную $expiration.

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

Чтобы проверить работу функции без ожидания Cron, вызовите её напрямую:

wpfactory_delete_expired_woocommerce_sessions();

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

Для подтверждения успешного удаления забытых корзин выполните:

  • Проверьте количество записей в таблице wp_woocommerce_sessions до и после запуска функции.
  • Включите логирование ошибок PHP и просмотрите файл error_log на предмет сообщений о количестве удалённых записей.
  • Используйте инструменты администрирования базы данных (phpMyAdmin, Adminer) для контроля изменений.

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

  • Ошибка: Cron задача не запускается. Проверьте, активен ли WP Cron на сайте. Для этого временно добавьте код wp_cron() в файл wp-config.php или настройте системную Cron задачу на вызов wp-cron.php.
  • Удаляются не только корзины, но и пользовательские сессии. Убедитесь, что удаляются только сессии с корзинами, а не сессии пользователей. Можно ограничить удаление, проверяя содержимое сессии, но это усложнит запрос.
  • Функция вызывает ошибки базы данных. Проверьте права пользователя базы данных и корректность префикса таблицы $wpdb->prefix.

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

  • Всегда делайте резервную копию базы данных перед запуском подобных операций.
  • Используйте WP-Cron с осторожностью — при большом трафике лучше настроить системный Cron для вызова wp-cron.php.
  • Если база большая, разбивайте удаление на части (например, по 1000 записей), чтобы избежать блокировок MySQL.
  • Отключайте логирование ошибок в продакшн-среде после отладки, чтобы не перегружать диск.

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

МетодПлюсыМинусы
Плагин (например, WooCommerce Cart Cleanup)Удобство, интерфейс, настройка без кодаДополнительная нагрузка, зависимости от обновлений плагина
Код в functions.php + WP-CronЛёгкость, контроль, минимум зависимостейТребует знаний, настройка Cron, риски при ошибках в коде
Ручное удаление через SQLМаксимальная скорость, точечное воздействиеРиск ошибок, требует доступа к базе, нет автоматизации
Как автоматизировать создание бэкапов в WordPress
13.01.2026
Как отключить автоматическое сохранение в WordPress REST API без потери безопасности
15.07.2026
Как правильно настроить WooCommerce для продавцов с разным уровнем доступа
17.04.2026
Как добавить автоматический отзыв в WordPress с помощью Expert Review
24.02.2026
Как отключить AJAX в WooCommerce для избежания проблем с кэшированием
25.04.2026