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

|

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

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

Чаще всего пользователи сталкиваются с задачей изменить статус заказа из кода, но делают это неправильно, что приводит к ошибкам или некорректному обновлению статусов и связанных действий (уведомления, логи).

Как программно изменить статус заказа в WooCommerce

Основные функции для смены статуса

WooCommerce предоставляет методы объекта WC_Order для управления статусом:

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

function change_order_status_programmatically( $order_id, $new_status ) {
    if ( ! in_array( $new_status, wc_get_order_statuses() ) ) {
        return new WP_Error( 'invalid_status', 'Неверный статус заказа' );
    }
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return new WP_Error( 'order_not_found', 'Заказ не найден' );
    }
    // Обновляем статус с уведомлением
    $order->update_status( $new_status, 'Статус изменён программно', true );
    return true;
}

Пример вызова функции

$result = change_order_status_programmatically( 1234, 'completed' );
if ( is_wp_error( $result ) ) {
    error_log( 'Ошибка смены статуса: ' . $result->get_error_message() );
} else {
    error_log( 'Статус успешно обновлен' );
}

Пошаговое решение задачи

  1. Получите ID заказа для изменения.
  2. Проверьте, что новый статус входит в список допустимых статусов WooCommerce. Это можно сделать через wc_get_order_statuses().
  3. Получите объект заказа через wc_get_order( $order_id ).
  4. Вызовите метод update_status() с нужным статусом, добавьте заметку для истории заказа и укажите, нужно ли отправлять уведомления.
  5. Проверьте результат, обработайте ошибки.

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

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

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

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

Сравнение способов изменения статуса заказа

МетодОтправка уведомленийОбновление историиПростота использованияРиски
update_status()ДаДаВысокаяНет
set_status()НетНетПростаяПропуск важных событий
Прямое изменение в базеНетНетСложнаяКонфликты, потеря данных
WooCommerce: динамическое обновление корзины на странице оформления заказа с помощью хука woocommerce_checkout_update_order_review
14.06.2026
Как удалить скрипт из заголовка WordPress для ускорения сайта
29.12.2025
Как удалить или изменить URL записи WordPress без редиректа и ошибок 404
05.12.2025
WooCommerce: как установить ограничения на сроки доставки и способы оплаты для конкретных товаров
10.05.2026
Как добавить AJAX в формы WordPress без плагинов
15.12.2025
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙