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

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

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

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

  • Увеличение размера таблиц wp_woocommerce_sessions и wp_woocommerce_cart_hash
  • Замедленная загрузка страниц с товарами или в админке WooCommerce
  • Большое число сессий с истекшим временем в базе данных
  • Проверка через phpMyAdmin: запрос SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expires < UNIX_TIMESTAMP() покажет количество просроченных сессий

Как автоматически удалять забытые корзины по CRON

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

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

function wpfactory_delete_expired_woocommerce_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $current_time = time();
    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $table WHERE session_expiry < %d",
            $current_time
        )
    );
    return $deleted;
}

2. Регистрируем WP-Cron задачу для автоматизации

Добавьте в functions.php следующий код, который создаст ежедневный CRON-запуск:

if ( ! wp_next_scheduled( 'wpfactory_delete_expired_sessions_hook' ) ) {
    wp_schedule_event( time(), 'daily', 'wpfactory_delete_expired_sessions_hook' );
}

add_action( 'wpfactory_delete_expired_sessions_hook', 'wpfactory_delete_expired_woocommerce_sessions' );

3. Опционально: добавляем хук для ручного запуска из админки

add_action('admin_post_wpfactory_manual_session_cleanup', function() {
    if ( ! current_user_can('manage_woocommerce') ) {
        wp_die('Нет доступа');
    }
    $deleted = wpfactory_delete_expired_woocommerce_sessions();
    wp_redirect(admin_url('tools.php?deleted=' . $deleted));
    exit;
});

Теперь вы можете запустить очистку вручную, вызвав URL https://your-site.com/wp-admin/admin-post.php?action=wpfactory_manual_session_cleanup

Как проверить, что удаление работает

  • Выполните запрос в базе: SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP() до и после запуска скрипта
  • Проверьте наличие CRON-задачи: в WP-CLI выполните wp cron event list | grep wpfactory_delete_expired_sessions_hook
  • Запустите ручной удалитель и убедитесь, что число удаленных записей > 0
  • Отслеживайте производительность сайта, особенно страницы с товарами и корзиной

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

  • CRON не запускается автоматически: проверьте, что на сайте активен WP-Cron или настройте системный CRON на вызов wp-cron.php
  • Неверное имя таблицы: убедитесь, что префикс таблиц совпадает с вашим, используйте $wpdb->prefix
  • Удаление не происходит из-за прав доступа: убедитесь, что пользователь запускает скрипт с правами manage_woocommerce или выше
  • Ошибки SQL: используйте $wpdb->last_error для отладки после вызова запроса

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

  • Не запускайте очистку чаще, чем раз в день. Частые удаления могут нагрузить базу данных.
  • Резервное копирование базы перед внедрением
  • Оптимизируйте таблицы базы данных после удаления: OPTIMIZE TABLE wp_woocommerce_sessions;
  • Используйте плагины кеширования и Clearfy Pro для дополнительной оптимизации и удаления лишних данных
  • Для крупных магазинов с большим количеством сессий рассмотрите настройку системного CRON вместо WP-Cron

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

МетодПлагинКодПлюсыМинусы
Встроенный WP-CronНетДа (пример выше)Легко настраивается, гибкостьЗависит от посещаемости сайта, может не запускаться вовремя
Системный CRON + WP-CLIНетДа (wp cron event run)Надежно, точное время выполненияТребует доступа к серверу
Плагин очистки сессийДа (например, WooCommerce Cart Cleanup)Нет (использует настройки)Простота настройки, интерфейсПотенциальная нагрузка, зависит от качества плагина
Как автоматизировать создание бэкапов в WordPress
13.01.2026
Как успешно запустить собственный плагин WordPress в продакшн: практические советы
20.12.2025
Как автоматически удалить забытые корзины в WooCommerce с помощью кода
28.06.2026
Как автоматически удалять забытые корзины в WooCommerce с помощью кода
19.06.2026
Автоматическое удаление забытых корзин в WooCommerce по CRON: пошаговое руководство
01.07.2026