Диагностика проблемы: накопление неактивных заказов и корзин в WooCommerce
При работе интернет-магазина на WooCommerce неактивные заказы и брошенные корзины со временем накапливаются в базе данных, что негативно влияет на производительность и усложняет управление заказами. Неактивными считаются заказы, которые не были оплачены или подтверждены в течение длительного времени, а корзины без активности давно не обновлялись.
Проблемы, которые возникают из-за неочищенных данных:
- Увеличение размера базы данных и медленная работа административной панели;
- Затрудненная аналитика продаж и отчёты из-за большого количества неактивных записей;
- Неприятный пользовательский опыт — например, если корзины резервируют товары, которые не будут куплены.
Как проверить наличие неактивных заказов и корзин
В админке WooCommerce перейдите в Заказы и отфильтруйте по статусу pending, failed, cancelled. Посмотрите, сколько заказов не меняли статус и дату обновления в течение 30+ дней.
Для корзин можно использовать SQL-запрос к таблице wp_woocommerce_sessions (если используется стандартный механизм сессий) или проверить плагинами, которые отслеживают брошенные корзины.
Пошаговое решение: автоматическое удаление неактивных корзин и заказов через код
1. Удаление неактивных заказов
Создадим функцию, которая удаляет заказы с определёнными статусами, которые не обновлялись более 30 дней. Добавьте следующий код в functions.php вашей темы или в отдельный плагин:
function wptem_delete_old_wc_orders() {
$statuses = array( 'pending', 'failed', 'cancelled' );
$date_threshold = date( 'Y-m-d H:i:s', strtotime( '-30 days' ) );
$args = array(
'limit' => -1,
'status' => $statuses,
'date_modified' => '<' . $date_threshold,
'return' => 'ids',
);
$orders = wc_get_orders( $args );
foreach ( $orders as $order_id ) {
wp_delete_post( $order_id, true ); // true — без возможности восстановления
}
}
// Запускаем очистку раз в сутки
add_action( 'woocommerce_cleanup_old_orders_daily', 'wptem_delete_old_wc_orders' );
// Планировщик событий
if ( ! wp_next_scheduled( 'woocommerce_cleanup_old_orders_daily' ) ) {
wp_schedule_event( time(), 'daily', 'woocommerce_cleanup_old_orders_daily' );
}2. Удаление неактивных сессий (корзин)
WooCommerce хранит сессии в таблице wp_woocommerce_sessions. Можно удалить записи, которые не обновлялись более 30 дней.
Добавьте следующий код в тот же файл:
function wptem_delete_old_wc_sessions() {
global $wpdb;
$threshold = strtotime( '-30 days' );
$table = $wpdb->prefix . 'woocommerce_sessions';
$wpdb->query( $wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$threshold
) );
}
add_action( 'woocommerce_cleanup_old_orders_daily', 'wptem_delete_old_wc_sessions' );Этот код расширяет ранее созданное ежедневное событие, чтобы удалять одновременно старые заказы и сессии.
Проверка результата после внедрения
1. В админке WooCommerce проверьте заказы с нужными статусами — старые должны удалиться после срабатывания крон-задачи (можно запустить вручную с помощью плагина WP Crontrol).
2. В базе данных проверьте таблицу wp_woocommerce_sessions, количество записей должно уменьшиться.
3. Используйте запросы SQL для контроля:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed', 'wc-cancelled') AND post_modified < NOW() - INTERVAL 30 DAY;и
SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));Частые ошибки и как их исправить
- Крон-задача не запускается. Проверяйте, что WP-Cron работает. Для теста можно вызвать функцию вручную или использовать плагин WP Crontrol.
- Удаляются нужные заказы. Проверьте правильность статусов и даты, используемой в условии. Лучше сначала выполнить выборку заказов и проверить их перед удалением.
- Сессии не удаляются. Возможно, используется сторонний плагин для сессий, и таблица отличается. Проверяйте структуру БД и адаптируйте код.
Практические советы по безопасности и производительности
- Перед удалением заказов создайте резервную копию базы данных.
- Для больших магазинов удаляйте данные пакетами, чтобы не перегружать сервер.
- Добавьте в код логи для контроля удалений, например через error_log или запись в файл.
- Если используете кеширование, очищайте кэш после удаления заказов и сессий.
- Рассмотрите плагины типа Clearfy Pro для дополнительной оптимизации WooCommerce и WordPress.
Сравнение способов очистки неактивных данных WooCommerce
| Метод | Преимущества | Недостатки | Пример |
|---|---|---|---|
| Ручное удаление в админке | Просто, не требует кода | Трудоемко, не автоматизировано | WooCommerce > Заказы > фильтрация и удаление |
| Автоматизация через WP-Cron и код | Полный контроль, автоматизация | Нужны навыки программирования | Код из статьи |
| Плагины для очистки базы | Удобно, дополнительные функции | Могут конфликтовать, нагрузка | Clearfy Pro, WP-Optimize |