Автоматическое удаление оставленных корзин в WooCommerce с помощью WP-Cron

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

Оставленные корзины — частая проблема интернет-магазинов на WooCommerce. Клиенты добавляют товары, но не завершают покупку, что приводит к накоплению «мусорных» записей в базе и потенциальным ошибкам в подсчётах и отчетах. WooCommerce по умолчанию не удаляет эти корзины автоматически, поэтому нужно настроить собственное решение.

Чтобы проверить, есть ли проблема, зайдите в базу данных WordPress и выполните SQL-запрос к таблице wp_woocommerce_sessions или используйте плагины для анализа сессий. Многочисленные старые неактивные сессии — признак необходимости очистки.

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

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

WooCommerce хранит данные корзин в сессиях, таблица wp_woocommerce_sessions. Очистка старых сессий удалит оставленные корзины.

function wpskill_delete_old_woocommerce_sessions() {
    global $wpdb;
    $expiration = 24 * 60 * 60; // 24 часа
    $time_limit = time() - $expiration;

    $table = $wpdb->prefix . 'woocommerce_sessions';
    
    // Удаляем сессии, где время последнего обновления меньше лимита
    $deleted = $wpdb->query($wpdb->prepare(
        "DELETE FROM {$table} WHERE session_expiry < %d",
        $time_limit
    ));

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

2. Регистрация WP-Cron задачи

Добавим событие, которое будет запускать очистку раз в сутки.

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

add_action('wpskill_delete_old_sessions_event', 'wpskill_delete_old_woocommerce_sessions');

3. Очистка при деактивации плагина или темы

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

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

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

Для проверки, что удаление сессий работает:

  • Проверьте логи ошибок сервера или debug.log, там появятся сообщения от error_log из функции удаления.
  • В базе данных wp_woocommerce_sessions должна уменьшиться численность записей старше 24 часов.
  • Можете вручную запустить функцию через WP-CLI:
wp eval 'wpskill_delete_old_woocommerce_sessions();'

или временно добавить вызов функции в functions.php для теста.

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

  • Отсутствие выполнения WP-Cron: по умолчанию WP-Cron запускается при заходе посетителей на сайт. Если трафика мало, задачи не выполняются. Решение — настроить системный cron на сервере для вызова wp-cron.php каждые 15 минут.
  • Неправильный префикс таблиц: в многосайтовой установке или при смене префикса $wpdb->prefix может отличаться. Проверьте, что используете правильный префикс.
  • Функция не удаляет сессии: ошибка в SQL-запросе или несоответствие структуры таблицы. Проверьте структуру таблицы wp_woocommerce_sessions и корректность полей.
  • Запланированное событие не создаётся: убедитесь, что событие регистрируется через wp хук и что код добавлен в активную тему или плагин.

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

  • Безопасность: функция работает только с базой WooCommerce, не трогая другие данные. Не давайте доступ к cron-заданиям неавторизованным лицам.
  • Производительность: удаление большого количества строк лучше делать пакетами, чтобы не перегружать базу. Для этого можно усложнить запрос, добавив LIMIT и запускать несколько раз.
  • Логирование: для продакшена отключите error_log вызовы или перенаправьте их в отдельный файл.
  • Использование плагинов: если нужен более продвинутый контроль, рассмотрите Clearfy Pro для оптимизации WooCommerce и удаления мусора, ссылка: https://wpshop.ru/plugins/clearfy.

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

МетодОписаниеПлюсыМинусы
Ручное удаление SQL-запросамиВыполнение запросов напрямую в базе с помощью phpMyAdmin или WP-CLIПростота, не требует кодаРиск ошибок, неудобно для регулярного использования
WP-Cron с кастомным кодомАвтоматизация удаления сессий через cron-задачи в WordPressАвтоматизация, гибкость, контрольЗависит от активности сайта и правильной настройки WP-Cron
Плагины очистки и оптимизацииИспользование специализированных плагинов типа Clearfy ProУдобство, дополнительные возможности оптимизацииПлатные решения, потенциальная нагрузка на сайт
Как автоматизировать просмотр и редактирование записей в WordPress с помощью кастомных функций
15.12.2025
Как создать обновляемые виджеты в WordPress с примерами кода
11.11.2025
Как добавить автоматические уведомления о обновлениях плагинов в WordPress
22.02.2026
Как отключить автоматическое обновление WooCommerce без переопределения файлов
09.05.2026
Проверка и устранение проблем с постоянными ссылками (Permalinks) в WordPress
15.01.2026