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

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

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

Как определить неактивные корзины в WooCommerce

В WooCommerce корзина хранится в сессиях пользователей. Обычно это данные в таблице wp_woocommerce_sessions. В сессии содержится массив с данными корзины, а также временная метка последней активности.

Неактивные корзины — те, у которых временная метка последней активности старше заданного срока (например, 7 дней).

Диагностика: проверка количества неактивных корзин

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

Если число большое, удаление необходимо.

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

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

function wpai_delete_expired_woocommerce_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $expiration_time = time() - (7 * DAY_IN_SECONDS); // 7 дней

    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $table WHERE session_expiry < %d",
            $expiration_time
        )
    );

    if (false === $deleted) {
        error_log('WP-AI: Ошибка при удалении неактивных корзин WooCommerce');
    } else {
        error_log("WP-AI: Удалено $deleted неактивных корзин WooCommerce");
    }
}

2. Запускаем эту функцию по крону WordPress, чтобы удаление происходило регулярно.

function wpai_schedule_woocommerce_cart_cleanup() {
    if (!wp_next_scheduled('wpai_woocommerce_cart_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wpai_woocommerce_cart_cleanup_hook');
    }
}
add_action('wp', 'wpai_schedule_woocommerce_cart_cleanup');

add_action('wpai_woocommerce_cart_cleanup_hook', 'wpai_delete_expired_woocommerce_sessions');

3. Добавляем очистку по запросу при деактивации плагина или вручную.

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

Как проверить, что удаление работает

  • Запустите вручную функцию wpai_delete_expired_woocommerce_sessions() через WP-CLI или подключенный скрипт.
  • Проверьте количество записей в таблице wp_woocommerce_sessions до и после удаления.
  • Включите логирование ошибок и посмотрите сообщения в debug.log (если включен WP_DEBUG_LOG).
  • Убедитесь, что по cron задача запускается — можно использовать плагин WP Crontrol для просмотра запланированных событий.

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

  • Неверное имя таблицы. Проверьте префикс базы данных $wpdb->prefix, он может отличаться от wp_.
  • Крон не срабатывает. Убедитесь, что на сайте есть трафик или используйте системный cron для запуска WP cron.
  • Удаляются нужные сессии. Настройте срок хранения согласно бизнес-логике, не ставьте слишком короткий период.
  • Ошибка в SQL запросе. Используйте $wpdb->prepare для безопасности и корректности запроса.
  • Проблемы с правами доступа к базе. Проверьте, что пользователь базы имеет права на DELETE.

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

  • Всегда тестируйте удаление на копии базы, чтобы не потерять важные данные.
  • Логируйте успешные и неуспешные удаления для мониторинга.
  • Используйте WP cron с интервалом не чаще раза в сутки, чтобы не нагружать сервер.
  • Если база очень большая, удаляйте записи партиями, чтобы избежать блокировок.
  • Обязательно делайте бэкапы перед внедрением автоматизации удаления.

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

МетодПлюсыМинусы
Ручное удаление через SQLБыстро, без кодаТребует админ-доступа к базе, риск ошибок
Код с WP cron (как в статье)Автоматизация, безопасно, гибкоНужна настройка cron, требует базовых знаний PHP
Плагины для очистки сессийПростота использованияМожет быть избыточным, нагрузка на сайт
WooCommerce: как использовать хуки для добавления пользовательных функций
22.04.2026
Автопостинг в WordPress с помощью AI плагинов: практическое руководство
06.02.2026
Как автоматизировать обновление контекста в Gutenberg с помощью AI
07.03.2026
Автоматическое создание резервных копий в WordPress: лучшие практические решения
19.11.2025
WooCommerce: автоматическое удаление закрытых и неактивных заказов через код
31.05.2026