WooCommerce: автоматическое обновление статуса заказа после отправки

Диагностика проблемы: когда и почему нужен автопереход статуса заказа

В интернет-магазинах на WooCommerce часто возникает задача — автоматически менять статус заказа после того, как товар отправлен клиенту. Например, при интеграции с курьерскими службами или сервисами отслеживания посылок. Без автоматизации приходится вручную менять статус на "Выполнен" или "Завершён", что увеличивает нагрузку на поддержку и приводит к задержкам.

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

  • Вы используете внешнюю систему для логистики с API;
  • Количество заказов велико, и ручное изменение статусов занимает много времени;
  • Статусы заказов не обновляются вовремя, клиенты часто звонят уточнять статус.

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

1. Подключение к API службы доставки

Для начала нужно получить от службы доставки API-ключ и документацию. На примере сервиса с webhook, который отправляет уведомление о смене статуса доставки:

add_action('rest_api_init', function () {
    register_rest_route('wpmy/v1', '/shipment-update', [
        'methods' => 'POST',
        'callback' => 'wpmy_handle_shipment_update',
        'permission_callback' => '__return_true',
    ]);
});

function wpmy_handle_shipment_update(WP_REST_Request $request) {
    $data = $request->get_json_params();
    if (empty($data['order_id']) || empty($data['shipment_status'])) {
        return new WP_REST_Response('Invalid data', 400);
    }

    $order_id = intval($data['order_id']);
    $shipment_status = sanitize_text_field($data['shipment_status']);

    $order = wc_get_order($order_id);
    if (!$order) {
        return new WP_REST_Response('Order not found', 404);
    }

    // Логика обновления статуса заказа
    if ($shipment_status === 'delivered') {
        $order->update_status('completed', 'Автоматическое обновление: заказ доставлен');
    } elseif ($shipment_status === 'shipped') {
        $order->update_status('processing', 'Заказ отправлен');
    }

    return new WP_REST_Response('Status updated', 200);
}

2. Настройка webhook в службе доставки

В админке службы доставки укажите URL вашего сайта для REST API эндпоинта, например:

https://example.com/wp-json/wpmy/v1/shipment-update

и настройте формат отправляемых данных в JSON с ключами order_id и shipment_status.

3. Безопасность и проверка данных

Рекомендуется добавить проверку ключа авторизации в заголовках запроса, чтобы не принимать случайные запросы:

function wpmy_handle_shipment_update(WP_REST_Request $request) {
    $auth = $request->get_header('Authorization');
    if ($auth !== 'Bearer ВАШ_ТОКЕН_ЗДЕСЬ') {
        return new WP_REST_Response('Unauthorized', 401);
    }

    // остальной код...

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

Чтобы убедиться, что автообновление работает:

  • Отправьте тестовый POST-запрос на REST API с правильными данными;
  • Проверьте в админке WooCommerce, что статус заказа изменился;
  • Посмотрите логи сервера и debug.log на предмет ошибок;
  • Попросите службу доставки сделать реальный webhook-запрос и убедитесь, что статус меняется.

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

  • Ошибка 404 при вызове REST API: Проверьте, что постоянные ссылки (ЧПУ) включены в настройках WordPress и что маршрут зарегистрирован корректно.
  • Заказы не обновляются: Убедитесь, что order_id в запросе совпадает с реальным ID заказа в WooCommerce.
  • Нет авторизации: Если добавлена проверка токена, убедитесь, что служба доставки передаёт корректный заголовок Authorization.
  • Статусы не меняются: Проверьте, что статусы WooCommerce совпадают с теми, что вы используете в коде (например, 'completed', 'processing').

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

  • Используйте nonce или OAuth для подтверждения запросов, если служба доставки поддерживает.
  • Логируйте входящие запросы с ошибками в отдельный файл для быстрой диагностики.
  • Не выполняйте тяжелые операции при обновлении статуса, чтобы не замедлять сайт.
  • Используйте update_status с сообщением для прозрачности в истории заказа.

Сравнение вариантов реализации автообновления статуса

МетодОписаниеПлюсыМинусы
Webhook + REST APIСлушаем уведомления службы доставки, меняем статусАвтоматизация, точное обновление, быстрый откликНужна настройка API службы доставки, безопасность
Периодический скрипт (WP-Cron)Проверяет статус заказов по API службы доставокНе зависит от внешних вебхуков, можно дописать логикуЗадержки между проверками, нагрузка на сервер
Ручное обновлениеМенять статусы вручную в админке WooCommerceПросто реализоватьЗатратно по времени, ошибки человека
Как удалить заблокированные или замороженные плагины в WordPress
04.05.2026
Как установить лимит на количество сообщений в формах WordPress
31.03.2026
Как автоматически удалять неактивных пользователей WordPress с помощью кода
27.03.2026
Как создать автоматическую систему отключения плагинов в WordPress при ошибках
04.04.2026
Как создать автоматический импорт CSV файлов в WordPress с помощью кода
20.03.2026