Что такое забытые корзины в WooCommerce и почему их удалять
Забытые корзины — это товары, добавленные пользователями в корзину, но без последующего оформления заказа. WooCommerce сохраняет эти данные в базе, что со временем может привести к её раздуванию и замедлению работы сайта, особенно при большом трафике. Автоматическое удаление таких записей помогает поддерживать базу в чистоте и улучшать производительность.
Диагностика: как определить наличие забытых корзин
WooCommerce хранит сессии корзин в базе данных в таблице wp_woocommerce_sessions. Для оценки количества записей можно выполнить SQL-запрос через phpMyAdmin или терминал:
SELECT COUNT(*) FROM wp_woocommerce_sessions;Если число записей превышает несколько тысяч, стоит задуматься о регулярной очистке.
Пошаговое решение: добавляем автоматическое удаление старых корзин
1. Создание функции очистки корзин старше N дней
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wc_clear_old_sessions() {
global $wpdb;
$days = 7; // Время жизни сессии в днях
$expiration = time() - ( $days * DAY_IN_SECONDS );
// Таблица сессий WooCommerce
$table = $wpdb->prefix . 'woocommerce_sessions';
// Удаляем записи, где session_expiry меньше текущего времени минус $days
$deleted = $wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$expiration
)
);
return $deleted;
}2. Запуск очистки по крону WordPress
Добавьте в файл functions.php следующий код для регистрации и запуска задачи:
// Регистрируем интервал в 12 часов
add_filter('cron_schedules', function($schedules) {
if(!isset($schedules['twicedaily'])) {
$schedules['twicedaily'] = [
'interval' => 12 * 60 * 60,
'display' => __('Every 12 Hours')
];
}
return $schedules;
});
// Планируем событие при активации темы/плагина
if (!wp_next_scheduled('wc_clear_sessions_hook')) {
wp_schedule_event(time(), 'twicedaily', 'wc_clear_sessions_hook');
}
// Хук на очистку
add_action('wc_clear_sessions_hook', 'wc_clear_old_sessions');Проверка результата после внедрения
- С помощью phpMyAdmin или SQL-запроса проверяем количество записей в
wp_woocommerce_sessionsдо и после запуска задачи. - Просмотрите файл журналов (если ведёте логирование) или добавьте временно логирование в функцию очистки, например, через
error_log, чтобы убедиться, что функция выполняется. - Проверьте, что пользователи могут без проблем добавлять товары в корзину и оформлять заказы — функция не должна удалять активные сессии.
Частые ошибки и как их исправить
- Функция не запускается по расписанию. Проверьте, что WP-Cron работает: для этого посетите
wp-cron.phpвручную или используйте плагин WP Crontrol. - Удаляются активные сессии. Проверьте правильность расчёта времени в условии, убедитесь, что время в базе и в PHP совпадает (UTC vs локальное).
- Ошибка доступа к базе данных. Проверьте глобальную переменную
$wpdbи правильность имени таблицы, учитывая префикс БД.
Практические советы по безопасности и производительности
- Время жизни сессии выбирайте исходя из специфики вашего магазина: 7 дней — стандарт, но у некоторых сайтов может быть 1-3 дня.
- Обязательно делайте резервные копии базы перед внедрением автоматической очистки.
- Если база большая, выполнение запроса удаления большого количества строк может создавать нагрузку — используйте лимит или разбивайте удаление партиями.
- Для улучшения производительности сайта используйте специализированные плагины кэширования и оптимизации базы, например, Clearfy Pro от WPShop (ссылка), которые помогут держать базу в порядке без кастомного кода.
Сравнение вариантов удаления забытых корзин
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Ручное удаление SQL-запросом | Прямое удаление записей через phpMyAdmin | Быстро, без кода | Требует регулярного запуска, риск ошибки |
| Автоматический WP-Cron с кодом | Автоматическая очистка по расписанию | Автоматизация, гибкость настройки | Зависит от работы WP-Cron, требует базовых навыков |
| Плагин оптимизации (например, Clearfy Pro) | Готовое решение с интерфейсом и дополнительными функциями | Простота, безопасность, поддержка | Платное, лишний плагин |