Диагностика проблемы с отменёнными заказами в WooCommerce
Отменённые заказы в WooCommerce со временем накапливаются, занимая место в базе данных и замедляя работу сайта. Особенно заметна проблема на больших интернет-магазинах с сотнями или тысячами заказов. Если не очищать отменённые заказы регулярно, возможны задержки в админ-панели, рост размера базы данных и медленная генерация отчётов.
Проверьте, сколько заказов в статусе cancelled хранится в вашей базе данных. Для этого можно использовать SQL-запрос через phpMyAdmin или WP-CLI:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled';Если количество отменённых заказов превышает несколько сотен, стоит автоматизировать их удаление.
Пошаговое решение: автоматическое удаление отменённых заказов через хук
WooCommerce не удаляет отменённые заказы автоматически, но можно добавить кастомный код в файл functions.php вашей дочерней темы или в отдельный плагин для автоматизации задачи.
1. Добавляем функцию удаления отменённых заказов старше 7 дней
function wc_auto_delete_cancelled_orders() {
$args = [
'status' => 'cancelled',
'date_modified' => '<' . (time() - WEEK_IN_SECONDS),
'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_cancelled_orders', 'wc_auto_delete_cancelled_orders');2. Планируем событие для регулярного запуска
function wc_schedule_cancelled_orders_deletion() {
if (!wp_next_scheduled('woocommerce_scheduled_delete_cancelled_orders')) {
wp_schedule_event(time(), 'daily', 'woocommerce_scheduled_delete_cancelled_orders');
}
}
add_action('wp', 'wc_schedule_cancelled_orders_deletion');Этот код запускает очистку отменённых заказов старше 7 дней ежедневно. Можно изменить интервал и срок по необходимости.
Проверка результата после внедрения
- Подождите сутки после активации кода или запустите действие вручную через WP-CLI или плагин WP Crontrol.
- Проверьте количество отменённых заказов командой SQL из раздела диагностики — оно должно уменьшиться.
- В админке WooCommerce перейдите в «Заказы» и отфильтруйте по статусу «Отменён». Количество отменённых заказов должно уменьшиться.
Частые ошибки и как их исправить
- Заказы не удаляются: Возможно, событие WP-Cron не запускается. Проверьте работу WP-Cron или замените на системный cron.
- Удаляются нужные заказы: Убедитесь, что в коде фильтр по дате и статусу работает корректно. Проверьте параметры
date_modified. - Потеря данных: Используйте
wp_trash_post()вместоwp_delete_post(), чтобы иметь возможность восстановить заказы из корзины. - Производительность: Если заказов много, делайте удаление партиями, например, по 50 штук за один запуск, чтобы не перегружать сервер.
Практические советы по безопасности и производительности
- Добавьте проверку прав пользователя, если запускаете удаление через админку.
- Используйте транзиенты для контроля количества удаляемых заказов за один запуск.
- Резервное копирование базы данных перед внедрением автоматического удаления.
- Для сайтов с большим трафиком и заказами рекомендуется запускать удаление отменённых заказов через системный cron, чтобы избежать проблем с WP-Cron.
Сравнение вариантов удаления отменённых заказов
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление через админку | Простота, контроль | Трудозатратно, риск забыть |
| Плагин для очистки заказов | Удобно, интерфейс | Доп. нагрузка, риск конфликтов |
| Код с WP-Cron (описанный выше) | Автоматизация, гибкость, контроль | Требует знаний, настройка WP-Cron |
| Системный cron + WP-CLI | Надёжно, масштабируемо | Сложность настройки |