Почему важно удалять заказы со статусом Отменен и Возврат
В крупных магазинах WooCommerce количество заказов со статусами Отменен и Возврат может быстро расти. Они занимают место в базе данных, замедляют админку и усложняют отчеты. Автоматическое удаление таких заказов помогает поддерживать базу в порядке и улучшает производительность.
Диагностика проблемы: как определить, что нужно удалять заказы
Чтобы понять, сколько заказов подлежат удалению, выполните следующий SQL-запрос в базе данных WordPress:
SELECT post_status, COUNT(*) AS count
FROM wp_posts
WHERE post_type = 'shop_order'
AND post_status IN ('wc-cancelled', 'wc-refunded')
GROUP BY post_status;Если число заказов со статусами wc-cancelled и wc-refunded превышает несколько сотен, стоит настроить автоматическое удаление.
Пошаговое решение: добавляем WP-Cron для удаления заказов
1. Создаем функцию удаления заказов
Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
function wpmentor_delete_cancelled_refunded_orders() {
// Получаем ID заказов со статусом отменен и возврат
$args = [
'post_type' => 'shop_order',
'post_status' => ['wc-cancelled', 'wc-refunded'],
'posts_per_page' => -1,
'fields' => 'ids',
];
$orders = get_posts($args);
if (empty($orders)) {
return;
}
foreach ($orders as $order_id) {
wp_delete_post($order_id, true); // true — удалить без возможности восстановления
}
}2. Регистрируем событие WP-Cron
Добавьте расписание для ежедневного запуска функции. Вставьте в functions.php или плагин:
function wpmentor_schedule_order_cleanup() {
if (!wp_next_scheduled('wpmentor_daily_order_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpmentor_daily_order_cleanup');
}
}
add_action('wp', 'wpmentor_schedule_order_cleanup');
add_action('wpmentor_daily_order_cleanup', 'wpmentor_delete_cancelled_refunded_orders');3. Запуск и проверка
Чтобы проверить работу вручную, вызовите функцию напрямую через админку, например, добавив временный вызов:
add_action('admin_init', function() {
if (current_user_can('manage_woocommerce') && isset($_GET['run_order_cleanup'])) {
wpmentor_delete_cancelled_refunded_orders();
wp_redirect(admin_url());
exit;
}
});Зайдите в админку по адресу https://ваш_сайт/wp-admin/?run_order_cleanup=1. После выполнения проверьте, что заказы удалены.
Проверка результата после внедрения
- Выполните SQL-запрос из раздела диагностики — количество заказов с указанными статусами должно стремиться к нулю.
- Проверьте админку WooCommerce → Заказы — отменённые и возвращённые заказы должны исчезать.
- Убедитесь, что автоматическое событие WP-Cron запускается ежедневно (можно использовать плагин WP Crontrol для мониторинга).
Частые ошибки и как их исправить
- Заказы не удаляются автоматически: проверьте, работает ли WP-Cron на вашем хостинге. На некоторых серверах WP-Cron отключён — настройте системный CRON или используйте плагин WP Crontrol.
- Удаление не происходит из-за прав доступа: убедитесь, что функция вызывается с необходимыми правами и что пользователь имеет права на удаление заказов.
- Удаление заказов вызывает ошибки: проверьте, что все зависимости WooCommerce загружены и функция не вызывается слишком рано (например, при инициализации плагинов).
- Удаляются нужные заказы: проверьте фильтр по статусам
wc-cancelledиwc-refunded— не меняйте без необходимости.
Практические советы по безопасности и производительности
- Используйте
wp_delete_post($order_id, true)с параметромtrue, чтобы удалять заказы без помещения в корзину и не засорять базу. - Если заказов слишком много, делайте удаление пакетами, чтобы не перегружать сервер. Например, по 50 заказов за раз.
- Отключайте автоматическое удаление на время важных операций с базой или во время пиковых нагрузок.
- Резервное копирование базы перед внедрением этой функции обязательно.
Таблица сравнения вариантов удаления заказов
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Ручное удаление через админку | Простота, контроль | Трудоемко при большом объеме | Подходит для небольших магазинов |
| WP-Cron автоматизация с кастомным кодом | Автоматизация, гибкость | Зависит от работы WP-Cron, требует настройки | Оптимально для средних и больших магазинов |
| Плагины для очистки базы | Быстрое внедрение, UI | Могут быть избыточными, нагрузки | Использовать с осторожностью, тестировать |