Диагностика проблемы: зачем удалять неоплаченные заказы
В WooCommerce неоплаченные заказы (статус "pending" или "failed") накапливаются со временем и могут занимать место в базе данных, замедлять работу магазина и усложнять администрирование. Особенно актуально для магазинов с большим трафиком и множеством клиентов, где заказы остаются в подвешенном состоянии долгое время.
Нужно определить, как долго заказы считаются "старым" мусором. Обычно берут период от 1 до 7 дней в зависимости от политики магазина.
Как проверить текущие неоплаченные заказы в WooCommerce
Для начала можно посмотреть количество неоплаченных заказов в админке WooCommerce, перейдя в WooCommerce → Заказы и применив фильтр по статусу Ожидает оплаты или Неудачный.
Также можно выполнить SQL-запрос для подсчёта таких заказов напрямую:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed');Пошаговое решение: автоматическое удаление неоплаченных заказов старше N дней
1. Создаем пользовательскую функцию удаления заказов
Добавьте следующий код в файл functions.php вашей темы или в плагин для пользовательских функций:
function wptips_delete_old_unpaid_orders() {
$days = 3; // число дней, старше которых удалять заказы
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'status' => array('pending', 'failed'),
'date_created' => '<' . $date,
'limit' => -1,
'return' => 'ids',
);
$orders = wc_get_orders($args);
if (!empty($orders)) {
foreach ($orders as $order_id) {
wp_trash_post($order_id); // перемещаем в корзину
}
}
}2. Запускаем функцию автоматически через WP-Cron
Добавьте в functions.php создание и привязку задачи WP-Cron, которая будет запускать удаление раз в сутки:
// Регистрируем событие при активации темы/плагина
function wptips_schedule_order_cleanup() {
if (!wp_next_scheduled('wptips_daily_order_cleanup')) {
wp_schedule_event(time(), 'daily', 'wptips_daily_order_cleanup');
}
}
add_action('wp', 'wptips_schedule_order_cleanup');
// Привязываем функцию удаления к событию
add_action('wptips_daily_order_cleanup', 'wptips_delete_old_unpaid_orders');
// Для отмены расписания (например, при деактивации плагина)
function wptips_clear_order_cleanup_schedule() {
$timestamp = wp_next_scheduled('wptips_daily_order_cleanup');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wptips_daily_order_cleanup');
}
}Проверка результата после внедрения
1. Проверьте в базе данных или в админке количество неоплаченных заказов старше 3 дней — они должны быть удалены или перемещены в корзину.
2. Для теста можно вручную создать заказ с датой старше 3 дней и статусом pending, затем запустить функцию вручную:
wptips_delete_old_unpaid_orders();3. Проверьте логи ошибок и убедитесь, что WP-Cron запускается (можно использовать плагин WP Crontrol для мониторинга).
Частые ошибки и как их исправить
- Функция не удаляет заказы: проверьте правильность статусов и даты. WooCommerce использует статусы с префиксом
wc-, но дляwc_get_ordersможно указывать без него. - WP-Cron не запускается: на некоторых хостингах нужно настроить системный cron или использовать плагин для имитации cron.
- Удаляются не те заказы: внимательно проверьте фильтр по дате и статусу, чтобы не удалить оплаченные или важные заказы.
- Заказы не удаляются полностью: функция
wp_trash_post()перемещает в корзину, при необходимости можно заменить наwp_delete_post($order_id, true)для полного удаления.
Практические советы по безопасности и производительности
- Не удаляйте заказы сразу, лучше перемещать их в корзину для возможности восстановления.
- Регулярно проверяйте логи и базу данных, чтобы избежать случайных потерь данных.
- Для магазинов с очень большим количеством заказов используйте пакетную обработку, чтобы не нагружать сервер.
- Используйте плагины, например, Clearfy Pro, для оптимизации базы и удаления мусора с дополнительными функциями и интерфейсом.
Сравнение методов удаления неоплаченных заказов
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление через админку | Простой, без кода | Трудоемко, не автоматизировано |
| Код с WP-Cron (как в статье) | Автоматизация, гибкость | Требует базовых навыков программирования |
| Плагины (Clearfy Pro и др.) | Интерфейс, дополнительные функции | Может быть платным, нагрузка на сайт |