Проблема: накопление отменённых заказов в WooCommerce
При активной работе интернет-магазина на WooCommerce заказы со статусом «Отменено» могут накапливаться в базе данных, занимая место и замедляя админку. Это влияет на производительность сайта и создает визуальный беспорядок в списке заказов. Периодическое ручное удаление неудобно и требует времени. Автоматизация очистки таких заказов поможет поддерживать базу в порядке.
Как диагностировать наличие большого числа отменённых заказов
Проверить количество отменённых заказов можно несколькими способами:
- В админке WooCommerce: «Заказы» → фильтр по статусу «Отменено». Если их несколько сотен — пора чистить.
- Через SQL-запрос на базе данных WordPress:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled';Если количество превышает 100+ и заказы старые, стоит настроить автоматическое удаление.
Пошаговое решение: автоматическое удаление заказов со статусом «Отменено» через WP Cron
Реализуем функцию, которая будет запускаться периодически и удалять отменённые заказы старше N дней. Пример кода размещается в functions.php вашей темы или в собственном плагине.
function auto_delete_cancelled_orders() {
$days = 30; // удалять заказы старше 30 дней
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$args = array(
'status' => 'cancelled',
'date_created' => '<' . $date_threshold,
'limit' => -1,
'return' => 'ids',
);
$orders = wc_get_orders( $args );
foreach ( $orders as $order_id ) {
wp_delete_post( $order_id, true );
}
}
function schedule_auto_delete_cancelled_orders() {
if ( ! wp_next_scheduled( 'auto_delete_cancelled_orders_hook' ) ) {
wp_schedule_event( time(), 'daily', 'auto_delete_cancelled_orders_hook' );
}
}
add_action( 'auto_delete_cancelled_orders_hook', 'auto_delete_cancelled_orders' );
add_action( 'wp', 'schedule_auto_delete_cancelled_orders' );Объяснение кода:
auto_delete_cancelled_orders— функция удаляет отменённые заказы старше 30 дней.schedule_auto_delete_cancelled_orders— регистрирует ежедневное событие WP Cron.- Удаление происходит с
wp_delete_postс параметромtrueдля полного удаления из базы.
Как проверить, что автоматическое удаление работает
- Создайте тестовый заказ, выставьте статус «Отменено» и установите дату создания более 30 дней назад (через SQL или вручную в базе).
- Запустите WP Cron вручную, например, через плагин WP Crontrol (https://ru.wordpress.org/plugins/wp-crontrol/) или вызовите функцию напрямую через
auto_delete_cancelled_orders();. - Проверьте, удалился ли заказ — он должен исчезнуть из списка заказов и базы данных.
- Также можно включить логирование в функцию, например, добавив
error_log('Deleted order ID: ' . $order_id);для отладки.
Частые ошибки и как их исправить
- Функция не запускается автоматически: убедитесь, что WP Cron работает на вашем хостинге. Для проверки используйте плагин WP Crontrol.
- Заказы не удаляются: проверьте права пользователя (функция запускается от имени сервера), а также правильность статуса ('cancelled', а не 'wc-cancelled').
- Удаление происходит, но заказы остаются в базе: возможно, включено «мягкое удаление» (корзина). Параметр
wp_delete_post($order_id, true)обеспечивает полное удаление. - Ошибка в форматах даты: дата должна быть в формате 'Y-m-d H:i:s', используйте функцию
date()правильно.
Практические советы по безопасности и производительности
- Удаление большого количества заказов за один раз может нагрузить сервер, ограничьте число заказов в одном запуске с помощью параметра
'limit' => 20и запускайте функцию чаще. - Настройте резервное копирование перед внедрением автоматического удаления.
- Используйте плагин Clearfy Pro для оптимизации базы и удаления мусора, если не хотите писать код вручную (Подробнее о Clearfy Pro).
- Добавьте логирование для мониторинга успешности работы скрипта.
Сравнение вариантов удаления отменённых заказов
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Ручное удаление через админку | Просто, не требует кода | Трудоёмко при большом количестве заказов | Подходит для мелких магазинов |
| WP Cron + пользовательский код | Автоматизация, гибкость | Требует навыков разработки, настройка | Оптимально для средних и крупных магазинов |
| Плагины (например, Clearfy Pro) | Готовое решение, дополнительные функции оптимизации | Платные, могут содержать лишний функционал | Подходит для быстрого и комплексного решения |