Диагностика проблемы брошенных заказов в WooCommerce
Брошенные заказы — частая проблема интернет-магазинов на WooCommerce. Клиент добавляет товары в корзину, начинает оформление, но не завершает покупку. Это приводит к ненужной нагрузке на базу данных и искажению статистики. Кроме того, корзины остаются занятыми, что может повлиять на лимитированные товары.
Для диагностики проблемы стоит проверить:
- Количество заказов со статусом
pendingилиfailedза последние 7-14 дней; - Сколько корзин остаются неочищенными, если используется плагин для сохранения корзин;
- Наличие уведомлений о брошенных заказах (если есть плагин для email-рассылок);
- Логи ошибок, связанные с обработкой заказов и сессий WooCommerce.
Пошаговое решение: автоматическое удаление брошенных заказов и очистка корзины
1. Автоматическое удаление неоплаченных заказов
WooCommerce не удаляет заказы автоматически, но можно добавить в functions.php следующий код для удаления заказов со статусом pending старше N дней.
function wc_auto_delete_pending_orders() {
$days = 7; // Количество дней хранения
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = [
'status' => 'pending',
'date_created' => '<' . $date,
'limit' => -1,
'return' => 'ids',
];
$orders = wc_get_orders($args);
foreach ($orders as $order_id) {
wp_trash_post($order_id); // Можно использовать wp_delete_post($order_id, true) для окончательного удаления
}
}
add_action('woocommerce_scheduled_delete_pending_orders', 'wc_auto_delete_pending_orders');
// Регистрируем CRON событие, если не существует
if (!wp_next_scheduled('woocommerce_scheduled_delete_pending_orders')) {
wp_schedule_event(time(), 'daily', 'woocommerce_scheduled_delete_pending_orders');
}2. Очистка корзины пользователей после определённого времени без активности
WooCommerce хранит корзину в сессии. Чтобы автоматически очищать корзины, можно использовать хук woocommerce_cart_loaded_from_session. Пример кода, который очищает корзину, если с момента последнего обновления прошло более 24 часов:
function wc_clear_cart_after_inactivity() {
if (is_admin()) return; // Только фронтенд
$cart = WC()->cart;
if (!$cart) return;
$last_update = WC()->session->get('cart_last_update');
$now = time();
if (!$last_update) {
WC()->session->set('cart_last_update', $now);
return;
}
$inactivity_limit = 24 * 60 * 60; // 24 часа
if (($now - $last_update) > $inactivity_limit) {
$cart->empty_cart(true);
WC()->session->set('cart_last_update', $now);
} else {
WC()->session->set('cart_last_update', $now);
}
}
add_action('woocommerce_cart_loaded_from_session', 'wc_clear_cart_after_inactivity');Проверка результата после внедрения
- Подождать минимум 1-2 дня после внедрения, чтобы сработал CRON для удаления старых заказов;
- Проверить в админке WooCommerce — количество заказов в статусе
pendingдолжно уменьшиться; - Добавить товар в корзину, не совершать действия и проверить через 24 часа, что корзина очищена (можно проверить через новую анонимную сессию);
- Просмотреть логи сервера и WooCommerce на предмет ошибок, связанных с удалением заказов и сессиями;
- Для отладки можно добавить логирование в функции удаления/очистки.
Частые ошибки и как их исправить
- CRON событие не срабатывает: проверьте, включён ли WP-Cron в настройках сервера или используйте системный cronjob для вызова
wp-cron.php; - Удаление заказов не происходит: убедитесь, что используемый статус заказа совпадает с тем, что вы хотите удалять (
pending,failedи т.п.); - Корзина не очищается: проверьте, что у пользователя включены куки и сессии WooCommerce корректно работают;
- Потеря данных: перед удалением заказов убедитесь, что это безопасно и вы не удаляете актуальные заказы;
- Конфликт с плагинами кеширования: кеш может мешать обновлению корзины и сессий, исключите страницы корзины и оформления из кеша.
Практические советы по безопасности и производительности
- Не удаляйте заказы сразу, используйте статус «корзина» или «pending» и время задержки не менее 7 дней;
- Для очистки корзины не используйте слишком короткий таймаут, чтобы не испортить пользовательский опыт;
- Регулярно оптимизируйте базу данных, удаляя мусорные данные — можно использовать плагин Clearfy Pro для автоматизации очистки и оптимизации;
- Проверяйте логи WooCommerce и сервера, чтобы вовремя обнаруживать проблемы с сессиями и заказами;
- Используйте кеширование с умом: исключайте страницы корзины и оформления из кеша, чтобы не создавать конфликтов.
Сравнение способов решения проблемы брошенных заказов и очистки корзины
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Ручное удаление заказов | Простота, полный контроль | Затратно по времени, риск забыть | Через админку WooCommerce |
| Код в functions.php (CRON) | Автоматизация, гибкость | Требует настройки, возможны ошибки CRON | Пример кода выше |
| Плагины для брошенных корзин | Уведомления, статистика | Дополнительная нагрузка, платные опции | Abandoned Cart Lite, WooCommerce Recover Abandoned Cart и др. |