Диагностика проблемы: зачем удалять неактивные заказы
В интернет-магазинах на WooCommerce часто накапливаются заказы с неоплаченным статусом, которые долго не меняются. Они занимают место в базе данных, замедляют работу административной панели и усложняют аналитику. Автоматическое удаление таких заказов через 30 дней после создания помогает поддерживать базу в порядке без ручного вмешательства.
Как определить заказы, подлежащие удалению
Заказы без оплаты в WooCommerce обычно имеют статус pending (ожидает оплаты), failed (неудачная оплата) или on-hold (ожидание подтверждения). Для очистки стоит ориентироваться на дату создания заказа и текущий статус.
Критерии выбора заказов для удаления:
- Статус заказа —
pending,failedилиon-hold - Дата создания заказа старше 30 дней
Пошаговое решение: код для автоматического удаления заказов
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин. Он выполняет удаление заказов без оплаты старше 30 дней при запуске WP-Cron задачи.
function wc_delete_old_unpaid_orders() {
$args = array(
'limit' => -1,
'status' => array('pending', 'failed', 'on-hold'),
'date_created' => '<' . ( new WC_DateTime() )->modify('-30 days')->date('Y-m-d H:i:s'),
'return' => 'ids',
);
$orders = wc_get_orders($args);
foreach ($orders as $order_id) {
$order = wc_get_order($order_id);
if ($order) {
$order->delete(true); // true - принудительное удаление
}
}
}
// Запускаем задачу раз в день
add_action('wp_loaded', function() {
if (!wp_next_scheduled('wc_daily_delete_unpaid_orders')) {
wp_schedule_event(time(), 'daily', 'wc_daily_delete_unpaid_orders');
}
});
add_action('wc_daily_delete_unpaid_orders', 'wc_delete_old_unpaid_orders');Проверка результата после внедрения
Чтобы убедиться, что код работает корректно, выполните следующие шаги:
- Создайте тестовый заказ с статусом
pendingи датой создания старше 30 дней (можно вручную изменить дату через базу или плагин WP CLI). - Запустите вручную событие WP-Cron (через плагин WP Crontrol или вызовом
do_action('wc_daily_delete_unpaid_orders');в админке). - Проверьте, что тестовый заказ удалён из списка заказов WooCommerce.
- Убедитесь, что другие заказы с оплатой и актуальными статусами остались нетронутыми.
Частые ошибки и как их исправить
- Код не запускается автоматически: убедитесь, что WP-Cron работает. Проверьте наличие задачи
wc_daily_delete_unpaid_ordersв расписании через плагин WP Crontrol. - Заказы не удаляются: проверьте права пользователя и доступ к базе данных. Функция
delete(true)требует прав на удаление записей. - Удаляются не те заказы: проверьте правильность фильтра по статусам и дате. Используйте отладочный вывод через
error_log()для проверки выборки заказов. - Удаление происходит слишком часто или редко: настройте периодичность cron через параметр
wp_schedule_event(). Рекомендуется раз в сутки.
Практические советы по безопасности и производительности
- Выполняйте удаление только по статусам, которые гарантированно не являются оплачеными или активными, чтобы избежать потери данных.
- Для больших магазинов с тысячами заказов ограничьте количество удаляемых заказов за одно выполнение, добавив параметр
limitс разумным числом (например, 100). - Перед удалением можно сделать резервную копию базы данных или экспортировать заказы на всякий случай.
- Используйте плагин Clearfy Pro для оптимизации и очистки базы WooCommerce без лишних усилий.
Сравнение методов удаления заказов
| Метод | Преимущества | Недостатки |
|---|---|---|
| Ручное удаление через админку | Контроль каждой записи, простота | Трудозатратно при большом количестве заказов |
| Плагин очистки базы | Автоматизация, удобство, график | Зависимость от стороннего кода, возможные конфликты |
| Код на wp-cron (предложенный вариант) | Полный контроль, кастомизация, без сторонних плагинов | Требует навыков разработки, настройка cron |