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

Диагностика проблемы: почему заброшенные корзины создают нагрузку

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

Чтобы проверить наличие проблемы, выполните SQL-запрос к базе данных:

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

Если количество записей значительно, пора автоматизировать очистку.

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

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

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

function wpskill_clear_expired_woocommerce_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $time = time();

    // Удаляем сессии с истекшим сроком
    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $time
    ) );

    if ( false === $deleted ) {
        error_log('Ошибка удаления заброшенных корзин WooCommerce');
    }
    return $deleted;
}

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

Добавьте код для регистрации задачи, которая будет запускаться раз в 6 часов:

function wpskill_schedule_clear_woocommerce_sessions() {
    if ( ! wp_next_scheduled( 'wpskill_clear_woocommerce_sessions_hook' ) ) {
        wp_schedule_event( time(), 'twicedaily', 'wpskill_clear_woocommerce_sessions_hook' );
    }
}
add_action( 'wp', 'wpskill_schedule_clear_woocommerce_sessions' );

add_action( 'wpskill_clear_woocommerce_sessions_hook', 'wpskill_clear_expired_woocommerce_sessions' );

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

Для проверки добавьте админский пункт или вызов функции вручную:

if ( is_admin() && isset($_GET['clear_wc_sessions']) ) {
    $deleted = wpskill_clear_expired_woocommerce_sessions();
    echo '<div class="notice notice-success is-dismissible">Удалено заброшенных корзин: ' . intval($deleted) . '</div>';
}

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

  • Через 6 часов (или после ручного запуска) выполните SQL-запрос из раздела диагностики — количество заброшенных корзин должно уменьшиться.
  • В логе ошибок WordPress проверьте отсутствие записей «Ошибка удаления заброшенных корзин WooCommerce».
  • Мониторьте производительность сайта и размер таблицы wp_woocommerce_sessions через phpMyAdmin или аналог.

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

  • WP-Cron не запускается автоматически: проверьте, что на сайте есть трафик, вызывающий wp-cron.php. Для гарантированного запуска настройте системный cron на сервере.
  • Неверное имя таблицы: префикс таблицы может отличаться. Используйте $wpdb->prefix для динамического определения.
  • Удаление не происходит: проверьте права пользователя базы данных и лог ошибок.
  • Удаление слишком частое или редкое: настройте интервал twicedaily или создайте кастомный интервал через add_filter('cron_schedules').

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

  • Не удаляйте сессии слишком часто — это может повлиять на пользовательский опыт, если клиент вернется и захочет завершить покупку.
  • Логируйте количество удаленных записей для мониторинга и отладки.
  • Для сайтов с большим трафиком лучше настроить системный cron и отключить wp-cron через define('DISABLE_WP_CRON', true); в wp-config.php.
  • Если используете плагин Clearfy Pro от WPShop, он может помочь с оптимизацией базы и очисткой мусора на сайте, что дополнит это решение.

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

МетодПлюсыМинусыРекомендации
WP-Cron функция (код)Гибкость, контроль над логикой, бесплатностьЗависит от трафика, требует навыков программированияЛучше для опытных разработчиков и кастомных проектов
Плагин очистки сессийПростота, готовое решениеМожет влиять на производительность, ограниченная кастомизацияДля быстрого внедрения и новичков
Системный cron + WP-CLIНадежность, независимость от трафикаТребует доступа к серверу и CLIРекомендуется для крупных сайтов с высокой нагрузкой
Как добавить автоматическое обновление цен в WooCommerce при изменении атрибутов
24.04.2026
Как использовать метаданные для оптимизации WordPress
06.03.2026
Автоматическое удаление старого контента в WordPress с помощью WP-Cron
15.04.2026
Оптимизация производительности запросов WordPress с помощью pre_get_posts
23.12.2025
Как добавить автоматическое обновление трансляции видео в WordPress
21.01.2026