Диагностика проблемы: зачем удалять неоплаченные заказы
В WooCommerce неоплаченные заказы накапливаются и могут загромождать базу данных, замедляя работу сайта и усложняя администрирование. Особенно актуально для магазинов с большим потоком заказов и длительным циклом оплаты.
Проверить количество неоплаченных заказов можно в админке WooCommerce в разделе "Заказы" с фильтром по статусу "Ожидает оплаты" или с помощью SQL-запроса:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-pending';
Пошаговое решение: удаление неоплаченных заказов старше 7 дней
1. Добавляем пользовательский WP-Cron для удаления заказов
Создадим функцию в functions.php вашей темы или в кастомном плагине, которая будет удалять заказы в статусе wc-pending, созданные более 7 дней назад.
function wpbe_delete_old_pending_orders() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-7 days'));
// Получаем ID заказов со статусом wc-pending старше 7 дней
$order_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts}
WHERE post_type = 'shop_order'
AND post_status = 'wc-pending'
AND post_date < %s",
$date_threshold
));
if (!empty($order_ids)) {
foreach ($order_ids as $order_id) {
wp_delete_post($order_id, true); // true — удаление без перемещения в корзину
}
}
}
2. Регистрируем событие WP-Cron
Добавим задачу, которая будет запускать функцию ежедневно. Для этого используем хук wp и функцию wp_schedule_event.
function wpbe_schedule_pending_order_deletion() {
if (!wp_next_scheduled('wpbe_daily_pending_order_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpbe_daily_pending_order_cleanup');
}
}
add_action('wp', 'wpbe_schedule_pending_order_deletion');
// Связываем событие с функцией удаления
add_action('wpbe_daily_pending_order_cleanup', 'wpbe_delete_old_pending_orders');
Проверка результата после внедрения
- Выполните вручную функцию удаления из консоли или с помощью вызова
wpbe_delete_old_pending_orders()через админку (например, подключившись к functions.php временно). - Проверьте, что заказы со статусом
wc-pending, созданные более 7 дней назад, исчезли из списка заказов в админке. - Запустите WP-Cron вручную (например, через WP-CLI
wp cron event run wpbe_daily_pending_order_cleanup) и убедитесь, что функция сработала. - Следите за базой данных, чтобы количество неоплаченных заказов не увеличивалось бесконтрольно.
Частые ошибки и как их исправить
- WP-Cron не срабатывает регулярно: по умолчанию WP-Cron запускается при посещении сайта. Если трафик низкий, можно настроить системный cron для вызова
wp-cron.phpили использовать плагин для мониторинга cron. - Удаление заказов не происходит: проверьте права пользователя или ограничения на удаление постов. Убедитесь, что функция
wp_delete_postвызывается с параметромtrueдля полного удаления. - Удаляются нужные заказы: проверьте условие по дате и статусу, чтобы не затронуть актуальные заказы. Желательно тестировать на копии сайта.
- Ошибки в SQL-запросе: используйте
$wpdb->prepareдля безопасности и корректности запроса.
Практические советы по безопасности и производительности
- Для больших магазинов с тысячами заказов используйте пакетное удаление (например, по 50 заказов за раз), чтобы избежать перегрузки сервера.
- Резервное копирование базы данных перед внедрением автоматического удаления обязательно.
- Для контроля можно настроить логирование удалённых заказов в отдельный файл или таблицу.
- Не удаляйте заказы, которые могут понадобиться для отчетов или бухгалтерии — при необходимости вместо удаления используйте смену статуса.
- Если вы используете плагин Clearfy Pro, в нем есть опции для оптимизации базы WooCommerce, которые можно рассмотреть в дополнение к кастомным решениям (https://wpshop.ru/plugins/clearfy?utm_source=wpbe.ru&utm_medium=article&utm_campaign=woocommerce-udalit-neoplachennye-zakazy-posle-7-dnej).
Сравнение способов удаления неоплаченных заказов
| Метод | Плюсы | Минусы | Рекомендуется для |
|---|---|---|---|
| Ручное удаление через админку | Простота, контроль | Трудозатратно при большом объеме | Маленькие магазины |
| WP-Cron + пользовательский код (как в статье) | Автоматизация, гибкость | Нужны базовые знания PHP, настройка WP-Cron | Средние и крупные магазины |
| Плагины очистки базы (Clearfy Pro, WP-Optimize) | Простота, дополнительные функции | Меньший контроль, возможны конфликты | Все уровни, при отсутствии кастомных требований |