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

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

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

Проверить наличие заброшенных корзин можно, изучив таблицу wp_woocommerce_sessions (префикс wp_ может отличаться в зависимости от настройки базы данных). В ней хранятся сессии пользователей, включая данные корзины. Если там много записей с длительным временем неактивности, это признак накопления заброшенных корзин.

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

SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(NOW());

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

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

1. Создаем функцию очистки сессий

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

function wpskill_clear_expired_woocommerce_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $time_now = time();
    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $time_now
    ));
    if ( false !== $deleted ) {
        error_log("[WP-Cron] Удалено заброшенных корзин: " . $deleted);
    }
}

2. Регистрируем событие WP-Cron

Добавим планировщик задач, который будет запускать нашу функцию ежедневно.

function wpskill_schedule_clear_sessions() {
    if ( ! wp_next_scheduled( 'wpskill_daily_clear_sessions' ) ) {
        wp_schedule_event( time(), 'daily', 'wpskill_daily_clear_sessions' );
    }
}
add_action( 'wp', 'wpskill_schedule_clear_sessions' );
add_action( 'wpskill_daily_clear_sessions', 'wpskill_clear_expired_woocommerce_sessions' );

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

Если код размещается в плагине или теме, важно убрать планировщик при их деактивации:

function wpskill_clear_sessions_deactivation() {
    $timestamp = wp_next_scheduled( 'wpskill_daily_clear_sessions' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wpskill_daily_clear_sessions' );
    }
}

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

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

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

  • Неправильный префикс таблиц в SQL-запросах. Используйте $wpdb->prefix, чтобы избежать ошибок.
  • Отсутствие регистрации WP-Cron события. Без wp_schedule_event функция не запустится.
  • Дублирование событий. Проверяйте наличие запланированного события через wp_next_scheduled, чтобы не создавать несколько одинаковых задач.
  • Запуск крона только при посещении сайта. WP-Cron зависит от трафика. Для сайтов с низкой посещаемостью стоит настроить системный cron.

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

  • Оптимизируйте частоту запуска. Если сайт большой, запускать очистку лучше не чаще раза в сутки, чтобы не нагружать базу.
  • Логируйте действия. Ведение логов помогает отслеживать эффективность и выявлять проблемы.
  • Обеспечьте безопасность кода. Код не должен допускать SQL-инъекции — используйте методы $wpdb->prepare.
  • При низком трафике используйте системный cron. Например, добавьте в crontab вызов WP-Cron скрипта:
* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

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

МетодОписаниеПлюсыМинусы
WP-Cron (код)Автоматическое удаление сессий через планировщик WordPressГибко, без плагинов, контроль кодаЗависит от трафика, требует навыков кодирования
Плагины очисткиГотовые решения для удаления старых сессий и оптимизацииПростота установки, интерфейсМожет грузить сайт, ограниченная настройка
Ручное удаление SQLЗапуск SQL команд вручнуюТочный контроль, быстроРиск ошибок, требует доступа к базе
Как использовать хуки и фильтры WordPress для автоматизации задач
25.01.2026
Как сделать защиту от bruteforce в WordPress с помощью плагинов и кода
25.03.2026
Автоматическое обновление стоимости товара в WooCommerce при изменении атрибутов
05.06.2026
Автоматическое создание и отправка email-отчетов в WordPress
14.03.2026
Как добавить динамические атрибуты товара в WooCommerce с примерами кода
01.05.2026