wpcodes.ru wordpress WP Codеs

Автоматическое удаление неактивных заказов в WooCommerce

Диагностика проблемы: зачем удалять неактивные заказы в WooCommerce?

В WooCommerce накапливаются заказы со статусами, которые не меняются длительное время, например, "ожидает оплаты" или "отменён". Такие «зависшие» заказы занимают место в базе данных, замедляют работу админки и могут создавать путаницу при аналитике продаж. Автоматическое удаление неактивных заказов помогает поддерживать базу в порядке и улучшить производительность магазина.

Как определить неактивные заказы для удаления

Основные критерии для удаления заказов:

  • Статус заказа: pending, failed, cancelled – заказы, которые не были завершены.
  • Возраст заказа: чаще всего удаляют заказы старше 30 дней. Этот срок можно настроить.

Вместо удаления заказов со статусом completed или processing — это повредит бизнесу.

Пошаговое решение: код для автоматического удаления неактивных заказов

Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

function wpcodes_delete_inactive_orders() {
    if ( ! current_user_can( 'manage_woocommerce' ) ) {
        return;
    }

    $days_to_keep = 30; // Количество дней, по истечении которых заказы считаются неактивными
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days_to_keep} days" ) );

    $args = array(
        'status' => array( 'pending', 'failed', 'cancelled' ),
        'date_created' => '<' . $date_threshold,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

    if ( ! empty( $orders ) ) {
        foreach ( $orders as $order_id ) {
            wp_trash_post( $order_id ); // Перемещаем заказ в корзину
        }
    }
}

// Запуск функции по крону, например, ежедневно
add_action( 'wp_loaded', function() {
    if ( ! wp_next_scheduled( 'wpcodes_delete_inactive_orders_cron' ) ) {
        wp_schedule_event( time(), 'daily', 'wpcodes_delete_inactive_orders_cron' );
    }
});

add_action( 'wpcodes_delete_inactive_orders_cron', 'wpcodes_delete_inactive_orders' );

Объяснение кода

  • Функция wpcodes_delete_inactive_orders получает заказы с указанными статусами и датой создания старше 30 дней.
  • Заказы отправляются в корзину с помощью wp_trash_post, что позволяет восстановить их при ошибке.
  • Используется wp-cron для ежедневного запуска очистки.

Как проверить, что удаление сработало

  • В админке WooCommerce зайдите в «Заказы» и отфильтруйте по статусам pending, failed, cancelled. После запуска скрипта заказы старше 30 дней должны исчезнуть.
  • Проверьте папку корзины WordPress (в разделе «Корзина» в админке) – там должны быть удалённые заказы.
  • Для отладки добавьте в функцию логирование, например, error_log с ID удаляемых заказов.

Частые ошибки и как их исправить

  • Заказы не удаляются: Проверьте, что на сайте работает wp-cron. Для теста можно вызвать функцию вручную через админский хук или WP CLI.
  • Удаляются нужные заказы: Убедитесь, что статус и дата фильтрации заданы правильно. Не используйте статус completed или processing.
  • Скрипт удаляет заказы без уведомления: По умолчанию удаление происходит в корзину, чтобы избежать потери данных. Если нужно полное удаление, замените wp_trash_post на wp_delete_post, но делайте бэкап.
  • Проблемы с правами: Скрипт запускается с правами пользователя, убедитесь, что он имеет manage_woocommerce.

Практические советы по безопасности и производительности

  • Перед внедрением всегда делайте резервную копию базы данных.
  • Удаление большого количества заказов может нагрузить сервер — если заказов много, разбивайте удаление на партии.
  • Используйте WP CLI для запуска очистки на больших сайтах — это быстрее и надёжнее.
  • Для более гибкой автоматизации можно расширить функцию, добавив настройки через админку или использовать WP Cron с пользовательским интервалом.
  • Для мониторинга состояния базы рекомендую использовать плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpcodes.ru&utm_medium=article&utm_campaign=woocommerce-avto-udaleniye-neaktivnyh-zakazov) — он помогает оптимизировать и чистить базу без риска.

Сравнение вариантов реализации автоматического удаления заказов

МетодПлюсыМинусыКогда использовать
Ручное удаление через админку WooCommerceПростота, контрольТрудоёмко, риск забытьНебольшой магазин, мало заказов
Код с wp-cron (как в статье)Автоматизация, гибкостьЗависит от работы wp-cron, требует навыковСредние и крупные магазины
Плагины для очистки базы (Clearfy Pro и др.)Удобный интерфейс, безопасностьПлатные решения, меньше контроля кодаДля бизнесов с бюджетом на оптимизацию
×

Создай идеальный сайт – теперь на 15% дешевле!

Подобрать тему →