WooCommerce: автоматическое удаление старых корзин покупателей по срокам

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

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

Проверить наличие старых корзин можно в таблице wp_woocommerce_sessions базы данных. Для этого выполните SQL-запрос:

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

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

Пошаговое решение: как автоматически удалять старые корзины в WooCommerce

1. Создание WP Cron задачи для очистки старых сессий

WooCommerce хранит данные сессий пользователей в таблице wp_woocommerce_sessions, где поле session_expiry определяет время истечения сессии в UNIX-формате. Нам нужно удалить записи с истекшим сроком.

2. Добавление функции удаления в functions.php или в собственный плагин

function wptemplates_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
    ));
    if ( false === $deleted ) {
        error_log('Ошибка при удалении старых сессий WooCommerce');
    } else {
        error_log("Удалено старых сессий WooCommerce: $deleted");
    }
}

3. Регистрация Cron задачи

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

add_action('wptemplates_delete_wc_sessions_cron', 'wptemplates_delete_expired_woocommerce_sessions');

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

Это запустит очистку один раз в сутки. Вы можете изменить период на 'hourly' или 'twicedaily', если нужно.

4. Очистка расписания при деактивации

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

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

  • Выполните SQL-запрос для проверки количества записей с истекшим сроком (см. выше) до и после запуска cron.
  • Проверьте логи PHP (error_log) — там будет количество удалённых записей или ошибки.
  • Для ручного теста запустите функцию напрямую в админке через плагин Code Snippets или WP-CLI: wp eval 'wptemplates_delete_expired_woocommerce_sessions();'

Частые ошибки и их устранение

  • Функция не вызывается: Проверьте, что cron событие запланировано (используйте плагин WP Crontrol для управления задачами).
  • Ошибка в запросе DELETE: Убедитесь, что префикс таблицы совпадает с вашим (обычно wp_, но может быть другим).
  • Удаление не происходит, но ошибок нет: Возможно, записи с истекшим сроком отсутствуют. Проверьте поле session_expiry в базе.
  • Ошибки доступа к базе данных: Проверьте права пользователя базы, используемого WordPress.

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

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

Сравнение вариантов реализации автоматической очистки корзин WooCommerce

ВариантОписаниеПлюсыМинусы
WP Cron + SQL DELETEУдаление напрямую из таблицы сессий с помощью wp_schedule_eventПростая реализация, нет дополнительных плагиновЗависит от срабатывания WP Cron (может не запускаться при низком трафике)
Плагины для очистки сессийГотовые решения с настройками расписанияУдобный интерфейс, дополнительные функцииМожет загружать систему, требует обновлений
Ручное удаление из базыВыполнение SQL запросов вручную по расписанию (через cron сервера)Полный контроль над процессомТребует доступа к серверу и навыков SQL
Как изменить URL страницы регистрации WordPress без плагинов
13.01.2026
Как изменить вывод публикаций в WordPress без изменения шаблона
04.03.2026
WooCommerce: автоматическое удаление старых корзин покупателей по срокам
30.07.2026
Как избежать конфликтов CSS и JS при использовании нескольких шаблонов в WordPress
09.01.2026
WooCommerce: как автоматически удалять старые корзины покупателей
13.06.2026