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

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

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

Чтобы определить, есть ли проблема, проверьте таблицу wp_woocommerce_sessions в базе данных. Там хранятся данные сессий пользователей, включая корзины. Если записи там копятся долго, значит корзины не очищаются.

Настройка автоматического удаления заброшенных корзин через WP-Cron

Почему WP-Cron?

WP-Cron — это встроенный в WordPress планировщик задач. С его помощью можно запускать регулярные процессы без сторонних плагинов. Мы создадим задачу, которая будет очищать устаревшие сессии WooCommerce, тем самым удаляя заброшенные корзины.

Пошаговое решение

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

    function wpskill_clear_abandoned_wc_carts() {
        global $wpdb;
        $expiration = 48 * HOUR_IN_SECONDS; // Время жизни корзины: 48 часов
        $time_limit = time() - $expiration;
    
        // Получаем все сессии старше 48 часов
        $sessions = $wpdb->get_results(
            $wpdb->prepare(
                "SELECT session_key FROM {$wpdb->prefix}woocommerce_sessions WHERE session_expiry < %d",
                $time_limit
            )
        );
    
        if ( ! empty( $sessions ) ) {
            foreach ( $sessions as $session ) {
                // Удаляем сессию
                $wpdb->delete( "{$wpdb->prefix}woocommerce_sessions", [ 'session_key' => $session->session_key ] );
            }
        }
    }
    
    // Регистрируем событие WP-Cron, если оно еще не запущено
    if ( ! wp_next_scheduled( 'wpskill_hourly_clear_wc_carts' ) ) {
        wp_schedule_event( time(), 'hourly', 'wpskill_hourly_clear_wc_carts' );
    }
    
    // Привязываем функцию к событию
    add_action( 'wpskill_hourly_clear_wc_carts', 'wpskill_clear_abandoned_wc_carts' );
  2. Этот код раз в час удаляет все сессии WooCommerce старше 48 часов, тем самым очищая заброшенные корзины.

  3. Для изменения интервала или времени жизни корзин достаточно поменять значения в переменной $expiration и расписании wp_schedule_event.

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

Чтобы убедиться, что очистка работает:

  • Зайдите в базу данных и выполните запрос к wp_woocommerce_sessions до и после запуска WP-Cron.
  • Можно вручную запустить событие через плагины типа WP Crontrol или с помощью WP CLI:
wp cron event run wpskill_hourly_clear_wc_carts

После этого убедитесь, что записи сессий старше 48 часов удалены.

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

  • WP-Cron не запускается автоматически: по умолчанию WP-Cron зависит от посещений сайта. Если трафика мало, задачи могут не запускаться. Решение — настроить системный cron для вызова wp-cron.php или использовать плагин WP Crontrol.
  • Удаляются не те сессии: проверьте правильность расчёта $time_limit. Время в базе хранится в UNIX timestamp.
  • Ошибка доступа к базе данных: убедитесь, что глобальный объект $wpdb доступен и у пользователя базы есть права на удаление.

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

  • Не устанавливайте слишком короткий срок жизни корзин, чтобы не потерять потенциальных покупателей.
  • Не запускайте очистку чаще одного раза в час, чтобы не создавать нагрузку на базу.
  • Используйте транзакции или проверяйте успешность удаления, если планируете усложнять логику.
  • Для крупных магазинов с высокой нагрузкой рассмотрите использование отдельного сервиса для очистки или оптимизации сессий.

Сравнение способов очистки заброшенных корзин WooCommerce

МетодПлюсыМинусыКомпромисс
Ручное удаление из базыКонтроль, быстроТребует времени, риск ошибокИспользовать для экстренных случаев
WP-Cron с кастомным кодомАвтоматизация, гибкостьЗависит от посещений сайтаНастроить системный cron
Плагины очистки WooCommerceПростота установкиМожет перегрузить сайт, не всегда гибкоИспользовать на малых сайтах
Удаление заблокированных и неактивных товаров в WooCommerce через базу данных
19.06.2026
Как автоматически удалить неиспользуемые вариации товаров в WooCommerce
01.07.2026
Автоматическое обновление стоимости товара в WooCommerce при изменении атрибутов
05.06.2026
Автоматическое изменение стоимости товара в WooCommerce при изменении атрибутов
21.05.2026
Как создать динамическое меню в WordPress с примерами кода
03.04.2026