Почему важно удалять неактивные корзины в WooCommerce
Неактивные корзины — это сессии пользователей, которые добавили товары, но не завершили покупку и давно не возвращались. Они занимают место в базе данных, могут замедлять работу сайта и создавать путаницу в отчетах. Автоматическое удаление таких корзин помогает поддерживать базу чистой и улучшать производительность.
Как определить неактивные корзины в WooCommerce
В WooCommerce корзина хранится в сессиях пользователей. Обычно это данные в таблице wp_woocommerce_sessions. В сессии содержится массив с данными корзины, а также временная метка последней активности.
Неактивные корзины — те, у которых временная метка последней активности старше заданного срока (например, 7 дней).
Диагностика: проверка количества неактивных корзин
SELECT COUNT(*) FROM wp_woocommerce_sessions
WHERE session_expiry < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY));
Если число большое, удаление необходимо.
Пошаговое решение: удаление неактивных корзин по срокам через код
1. Создаем функцию для удаления сессий с истекшим сроком.
function wpai_delete_expired_woocommerce_sessions() {
global $wpdb;
$table = $wpdb->prefix . 'woocommerce_sessions';
$expiration_time = time() - (7 * DAY_IN_SECONDS); // 7 дней
$deleted = $wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$expiration_time
)
);
if (false === $deleted) {
error_log('WP-AI: Ошибка при удалении неактивных корзин WooCommerce');
} else {
error_log("WP-AI: Удалено $deleted неактивных корзин WooCommerce");
}
}
2. Запускаем эту функцию по крону WordPress, чтобы удаление происходило регулярно.
function wpai_schedule_woocommerce_cart_cleanup() {
if (!wp_next_scheduled('wpai_woocommerce_cart_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpai_woocommerce_cart_cleanup_hook');
}
}
add_action('wp', 'wpai_schedule_woocommerce_cart_cleanup');
add_action('wpai_woocommerce_cart_cleanup_hook', 'wpai_delete_expired_woocommerce_sessions');
3. Добавляем очистку по запросу при деактивации плагина или вручную.
function wpai_clear_scheduled_cart_cleanup() {
$timestamp = wp_next_scheduled('wpai_woocommerce_cart_cleanup_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpai_woocommerce_cart_cleanup_hook');
}
}
register_deactivation_hook(__FILE__, 'wpai_clear_scheduled_cart_cleanup');
Как проверить, что удаление работает
- Запустите вручную функцию
wpai_delete_expired_woocommerce_sessions()через WP-CLI или подключенный скрипт. - Проверьте количество записей в таблице
wp_woocommerce_sessionsдо и после удаления. - Включите логирование ошибок и посмотрите сообщения в
debug.log(если включен WP_DEBUG_LOG). - Убедитесь, что по cron задача запускается — можно использовать плагин WP Crontrol для просмотра запланированных событий.
Частые ошибки и как их исправить
- Неверное имя таблицы. Проверьте префикс базы данных
$wpdb->prefix, он может отличаться отwp_. - Крон не срабатывает. Убедитесь, что на сайте есть трафик или используйте системный cron для запуска WP cron.
- Удаляются нужные сессии. Настройте срок хранения согласно бизнес-логике, не ставьте слишком короткий период.
- Ошибка в SQL запросе. Используйте
$wpdb->prepareдля безопасности и корректности запроса. - Проблемы с правами доступа к базе. Проверьте, что пользователь базы имеет права на DELETE.
Практические советы по безопасности и производительности
- Всегда тестируйте удаление на копии базы, чтобы не потерять важные данные.
- Логируйте успешные и неуспешные удаления для мониторинга.
- Используйте WP cron с интервалом не чаще раза в сутки, чтобы не нагружать сервер.
- Если база очень большая, удаляйте записи партиями, чтобы избежать блокировок.
- Обязательно делайте бэкапы перед внедрением автоматизации удаления.
Сравнение методов удаления неактивных корзин
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление через SQL | Быстро, без кода | Требует админ-доступа к базе, риск ошибок |
| Код с WP cron (как в статье) | Автоматизация, безопасно, гибко | Нужна настройка cron, требует базовых знаний PHP |
| Плагины для очистки сессий | Простота использования | Может быть избыточным, нагрузка на сайт |