Проблема: накопление отмененных заказов в WooCommerce
В WooCommerce по умолчанию отмененные заказы остаются в базе данных и админке, что со временем приводит к загромождению, увеличению размера базы данных и замедлению работы сайта. Особенно актуально для магазинов с большим количеством отмен и возвратов.
Диагностика проблемы
Чтобы проверить, есть ли у вас проблема с отмененными заказами, выполните следующие шаги:
- Зайдите в админку WooCommerce → Заказы.
- Отфильтруйте заказы по статусу
Отменено. - Посмотрите количество таких заказов и дату их создания.
Если таких заказов сотни или тысячи, и они не нужны для отчетности, можно настроить их автоматическое удаление.
Пошаговое решение: удаление отмененных заказов по расписанию
1. Создаем функцию для удаления отмененных заказов старше заданного срока
function wpb_delete_old_cancelled_orders() {
$days = 30; // удалять отмененные заказы старше 30 дней
$date = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$args = array(
'status' => 'cancelled',
'date_created' => '<' . $date,
'limit' => -1,
'return' => 'ids',
);
$orders = wc_get_orders($args);
if (!empty($orders)) {
foreach ($orders as $order_id) {
wp_delete_post($order_id, true); // принудительное удаление
}
}
}2. Добавляем задачу в WP-Cron для регулярного запуска
function wpb_schedule_cancelled_orders_cleanup() {
if (!wp_next_scheduled('wpb_cleanup_cancelled_orders_hook')) {
wp_schedule_event(time(), 'daily', 'wpb_cleanup_cancelled_orders_hook');
}
}
add_action('wp', 'wpb_schedule_cancelled_orders_cleanup');
add_action('wpb_cleanup_cancelled_orders_hook', 'wpb_delete_old_cancelled_orders');3. Опционально: удаляем задачу при деактивации плагина или темы
function wpb_clear_cancelled_orders_cron() {
$timestamp = wp_next_scheduled('wpb_cleanup_cancelled_orders_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpb_cleanup_cancelled_orders_hook');
}
}
register_deactivation_hook(__FILE__, 'wpb_clear_cancelled_orders_cron');Проверка результата после внедрения
- Проверьте в админке количество отмененных заказов до запуска кода.
- После того, как cron-задание выполнится (обычно в течение суток), снова отфильтруйте отмененные заказы. Заказы старше 30 дней должны исчезнуть.
- Для тестирования можно уменьшить переменную
$daysдо 1 и вручную запустить функциюwpb_delete_old_cancelled_orders()через админ-панель или WP-CLI.
Частые ошибки и как их исправить
- Cron-задача не запускается: проверьте, включен ли WP-Cron на сайте. Для проверки в wp-config.php не должна быть прописана константа
DISABLE_WP_CRONили она должна бытьfalse. Если сайт на низкой посещаемости, cron может не запускаться, тогда настройте системный cron на сервере. - Заказы не удаляются: убедитесь, что статус заказа точно
cancelled, а не, например,refundedилиfailed. Также проверьте права на удаление записей, код должен запускаться с правами администратора. - Удаление заказов приводит к потере данных: если вы используете интеграции или отчеты, которые требуют хранения отмененных заказов, автоматическое удаление не рекомендуется.
Практические советы по безопасности и производительности
- Перед внедрением автоматического удаления сделайте резервную копию базы данных, например, с помощью плагина UpdraftPlus или через хостинг.
- Если база данных очень большая, ограничьте количество заказов, удаляемых за один запуск, добавив параметр
limit(например,100) и реализовав пакетную обработку. - Для контроля запланированных задач используйте плагин WP Crontrol, чтобы видеть расписание и вручную запускать задачи.
- Если вы используете плагин Clearfy Pro от WPShop, в нем есть инструменты для оптимизации базы и очистки данных — это может помочь дополнительно разгрузить базу.
Сравнение вариантов удаления отмененных заказов
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление через админку WooCommerce | Простота, не требует кода | Трудоемко при большом объеме заказов |
| Автоматическое удаление через WP-Cron и код | Автоматизация, регулярность, не требует вмешательства | Требует навыков программирования, возможны ошибки при неправильных настройках |
| Использование плагинов очистки базы (например, Clearfy Pro) | Удобный интерфейс, дополнительные функции оптимизации | Платные опции, возможны конфликты с другими плагинами |