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

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

Пустые корзины (корзины без товаров) появляются в WooCommerce из-за сессий пользователей, которые заходили на сайт, добавляли товары и затем удаляли их или просто не завершали покупку. Такие записи хранятся в базе, занимая место и замедляя работу сайта, особенно при большом трафике. Автоматическое удаление пустых корзин помогает оптимизировать базу данных и улучшить производительность без привлечения сторонних плагинов.

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

Для начала убедитесь, что на вашем сайте действительно есть пустые корзины. Это можно проверить с помощью SQL-запроса к базе данных MySQL, используя phpMyAdmin или любой другой инструмент:

SELECT session_key, session_value FROM wp_woocommerce_sessions WHERE session_value LIKE '%"cart";a:0:%';

Этот запрос показывает сессии, где корзина пуста (a:0: — сериализованный пустой массив товаров). Если таких записей много, стоит запускать очистку регулярно.

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

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

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

function wc_delete_empty_cart_sessions() {
    global $wpdb;

    $like_empty_cart = '%"cart";a:0:%';
    $table = $wpdb->prefix . 'woocommerce_sessions';

    $deleted = $wpdb->query(
        $wpdb->prepare("DELETE FROM $table WHERE session_value LIKE %s", $like_empty_cart)
    );

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

2. Настройка регулярного запуска через WP-Cron

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

if ( ! wp_next_scheduled( 'wc_delete_empty_cart_sessions_cron' ) ) {
    wp_schedule_event( time(), 'hourly', 'wc_delete_empty_cart_sessions_cron' );
}

add_action( 'wc_delete_empty_cart_sessions_cron', 'wc_delete_empty_cart_sessions' );

Этот код запускает очистку каждый час. При необходимости интервал можно изменить на дневной или другой.

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

  • Подождите 1–2 часа после активации крона.
  • Проверьте базу данных повторным SQL-запросом из раздела диагностики. Количество пустых сессий должно уменьшиться.
  • Включите логирование ошибок (например, через error_log в коде) и проверьте файл debug.log в папке wp-content на наличие записей об удалении.

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

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

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

  • Не запускайте удаление слишком часто — это создаст нагрузку на базу.
  • Перед внесением изменений всегда делайте резервную копию базы.
  • Логируйте выполнение задач для отладки и мониторинга.
  • Если сайт на многопользовательской установке или с большим трафиком, рассмотрите возможность запуска крона через системный cron для надежности.

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

МетодПлюсыМинусы
Плагин очистки сессийПростота установки, готовые настройкиДополнительная нагрузка, возможные конфликты
Код с WP-Cron (как в статье)Минимум плагинов, гибкость настройкиТребует навыков и контроля работы крона
Ручное удаление из базыМоментальный результатРиски ошибок, неудобно повторять регулярно
Как удалить или изменить регистрацию пользователя в WordPress без плагинов
10.01.2026
Как использовать WP REST API для создания простого плагина в WordPress
12.02.2026
Как создать свой плагин для WordPress с обратной связью
30.11.2025
Решение проблемы остановки записи при массовом импорте в WordPress
09.12.2025
Как добавить адаптивные изображения в WordPress для ускорения сайта
20.11.2025