Как автоматизировать обновление статусов заказов в WordPress

В управлении интернет-магазином на базе WordPress и WooCommerce одной из важных задач является правильное и своевременное обновление статусов заказов. Автоматизация этого процесса помогает экономить время и минимизировать ошибки, связанные с ручным изменением статусов. В этой статье мы подробно разберем, как можно организовать автоматическое обновление статусов заказов с помощью PHP-кода, а также рассмотрим полезные плагины и практические примеры.

Почему важно автоматизировать обновление статусов заказов

Статусы заказов — ключевой элемент в процессе обработки продаж. Они информируют как администратора сайта, так и клиента о текущем состоянии заказа: ожидает оплаты, в обработке, выполнен и т.д. Ручное изменение статусов при большом объеме заказов становится неэффективным и подверженным ошибкам.

Автоматизация позволяет:

  • Сократить время обработки заказов;
  • Избежать человеческих ошибок;
  • Обеспечить своевременное информирование клиентов;
  • Упростить интеграцию с внешними системами (например, с 1С или службами доставки).

Использование хуков WooCommerce для автоматического обновления заказов

WooCommerce предоставляет множество хуков и фильтров, с помощью которых можно влиять на логику работы с заказами. Например, часто нужно менять статус заказа после оплаты, отправки или определенных событий.

Рассмотрим пример автоматического перевода заказа в статус «выполнен» через 3 дня после подтверждения оплаты:

add_action('wporder_cron_update_order_status', 'wporder_update_order_status_to_completed');

function wporder_update_order_status_to_completed() {
    $args = array(
        'status' => 'processing',
        'limit' => -1,
    );
    $orders = wc_get_orders($args);

    foreach ($orders as $order) {
        $date_paid = $order->get_date_paid();
        if ($date_paid) {
            $diff = current_time('timestamp') - $date_paid->getTimestamp();
            if ($diff > 3 * DAY_IN_SECONDS) {
                $order->update_status('completed', 'Автоматическое обновление статуса после 3 дней');
            }
        }
    }
}

// Планировщик задач
if (!wp_next_scheduled('wporder_cron_update_order_status')) {
    wp_schedule_event(time(), 'daily', 'wporder_cron_update_order_status');
}

Этот код создает задачу в планировщике WordPress, которая раз в сутки проверяет заказы в статусе «processing» и переводит их в «completed», если с момента оплаты прошло больше 3 дней.

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

Функция wporder_update_order_status_to_completed получает все заказы со статусом «processing», затем проверяет дату оплаты каждого заказа. Если прошло более трех дней, статус меняется на «completed» с комментарием об автоматическом обновлении. Планировщик задач запускает эту функцию ежедневно.

Автоматическое обновление статуса при смене платежного состояния

Еще одна частая задача — изменение статуса заказа сразу после успешной оплаты. WooCommerce уже меняет статус на «processing» или «completed», но иногда требуется кастомная логика. Например, если вы используете нестандартный платежный шлюз или хотите добавить дополнительные проверки.

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

add_action('woocommerce_payment_complete', 'wporder_custom_payment_complete_status');

function wporder_custom_payment_complete_status($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Проверяем текущий статус
    if ($order->get_status() === 'processing') {
        // Меняем статус на кастомный, например 'awaiting_shipment'
        $order->update_status('awaiting_shipment', 'Статус обновлен автоматически после оплаты');
    }
}

Для этого примера необходимо зарегистрировать новый статус awaiting_shipment. Это делается с помощью фильтров WooCommerce:

add_filter('wc_order_statuses', 'wporder_add_custom_order_status');

function wporder_add_custom_order_status($order_statuses) {
    $order_statuses['wc-awaiting_shipment'] = 'Ожидает отправки';
    return $order_statuses;
}

add_action('init', 'wporder_register_custom_order_status');

function wporder_register_custom_order_status() {
    register_post_status('wc-awaiting_shipment', array(
        'label' => 'Ожидает отправки',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Ожидает отправки <span class="count">(%s)</span>', 'Ожидает отправки <span class="count">(%s)</span>'),
    ));
}

Полезные плагины для автоматизации управления заказами

Если вы не хотите писать код самостоятельно, можно использовать готовые решения. Среди полезных плагинов выделяются:

  • WooCommerce Automation — позволяет настраивать правила для автоматического изменения статусов и уведомлений;
  • Clearfy Pro — помогает оптимизировать работу WooCommerce и имеет модули для автоматизации процессов;
  • WPRemark — полезен для автоматического сбора отзывов и управления заказами.

Автоматизация смены статусов при интеграции с внешними системами

Многие магазины используют 1С, CRM или службы доставки для обработки заказов. Автоматическое обновление статусов заказов в WordPress в соответствии с данными из этих систем позволяет держать информацию в актуальном состоянии.

Пример интеграции с системой, которая отправляет вебхуки с изменением статуса заказа:

add_action('wp_ajax_wporder_update_status_webhook', 'wporder_handle_status_webhook');
add_action('wp_ajax_nopriv_wporder_update_status_webhook', 'wporder_handle_status_webhook');

function wporder_handle_status_webhook() {
    $order_id = intval($_POST['order_id'] ?? 0);
    $new_status = sanitize_text_field($_POST['status'] ?? '');

    if (!$order_id || !$new_status) {
        wp_send_json_error('Неверные данные');
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        wp_send_json_error('Заказ не найден');
    }

    $allowed_statuses = array('processing', 'completed', 'cancelled', 'on-hold');
    if (!in_array($new_status, $allowed_statuses)) {
        wp_send_json_error('Недопустимый статус');
    }

    $order->update_status($new_status, 'Обновление статуса через вебхук');
    wp_send_json_success('Статус обновлен');
}

Такой подход позволяет безопасно обновлять статусы заказов из внешних систем через AJAX-вызовы и контролировать логику обновления.

Рекомендации по тестированию и отладке

При автоматизации обновления статусов важно тщательно протестировать код и сценарии:

  • Проверяйте работу на тестовом сайте или локальной копии;
  • Используйте логирование (например, через error_log()) для отслеживания действий;
  • Позаботьтесь о безопасности — проверяйте права пользователя и источники запросов;
  • Регулярно обновляйте плагины и ядро WordPress.

Автоматизация обновления статусов заказов — это мощный инструмент для повышения эффективности и качества обслуживания клиентов. Надеемся, что приведенные примеры и рекомендации помогут вам внедрить надежное решение в вашем магазине на WordPress.

Как создать автоматически обновляемый список заказов в WordPress с фильтрами и AJAX
26.02.2026
Автоматическое удаление старых заказов в WordPress: практическое руководство
08.12.2025
Автоматизация создания и обновления заказов через REST API в WordPress
27.03.2026
Автоматическое создание отчёта по заказам в WordPress с фильтрами и примерами кода
18.02.2026
Оптимизация обработки заказов в WordPress: лучшие практики и примеры кода
07.11.2025