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

Диагностика задачи: зачем менять статус заказа программно

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

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

1. Получение объекта заказа

Для изменения статуса сначала нужно получить объект WC_Order. Пример получения заказа по ID:

$order_id = 123; // ID заказа
$order = wc_get_order( $order_id );
if ( ! $order ) {
    return; // заказ не найден
}

2. Проверка текущего статуса

Перед изменением полезно проверить текущий статус, чтобы избежать лишних действий:

$current_status = $order->get_status();
// например, изменять только если статус 'processing'
if ( $current_status !== 'processing' ) {
    return;
}

3. Изменение статуса заказа

Для изменения статуса используйте метод update_status(), который принимает новый статус без префикса wc- и необязательное сообщение:

$new_status = 'completed';
$order->update_status( $new_status, 'Автоматическое обновление статуса после проверки' );

Метод update_status() автоматически обновит статус заказа, отправит уведомления клиенту (если настроено) и сохранит изменения.

4. Пример функции для изменения статуса по условию

function wpmax_change_order_status( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return false;
    }
    if ( $order->get_status() !== 'processing' ) {
        return false;
    }
    $order->update_status( 'completed', 'Статус изменен программно' );
    return true;
}

Как проверить, что статус изменился

  • Перейдите в админку WooCommerce → Заказы и найдите нужный заказ, убедитесь, что статус обновился.
  • Посмотрите таблицу базы данных wp_posts, поле post_status для записи заказа должно быть wc-completed.
  • Если настроена отправка уведомлений, клиент должен получить email о новом статусе.

Частые ошибки при программном изменении статуса заказов

  • Использование статуса с префиксом wc-. В методе update_status() статус надо указывать без wc- (например, completed, а не wc-completed).
  • Изменение несуществующего заказа. Перед вызовом update_status() всегда проверяйте, что объект заказа получен.
  • Игнорирование текущего статуса. Изменение статуса без проверки может привести к логическим ошибкам или повторным уведомлениям.
  • Отсутствие вызова save(). Метод update_status() сам сохраняет изменения, дополнительный вызов save() не нужен и может вызвать баги.

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

  • Вызывайте изменение статуса только после проверки прав пользователя, если это происходит через фронтенд или REST API, чтобы избежать несанкционированных изменений.
  • Для массового изменения статусов используйте WP-CLI или батчи, чтобы не нагружать сервер при большом количестве заказов.
  • Добавляйте логирование действий изменения статусов для отладки и аудита, например, используя error_log() или специализированные плагины.

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

СпособОписаниеПлюсыМинусы
Метод update_status()Стандартный метод WooCommerce, программное изменение статуса заказаКорректно обновляет статус, триггерит уведомления и хукиТребует правильного статуса без wc-, нужно проверять объект
Прямое обновление post_status в базеИзменение статуса заказа через SQL запросБыстрое изменениеНе обновляет кеш, не триггерит хуки, может привести к ошибкам
Использование плагинов автоматизацииПлагины для массового изменения статусов по правиламУдобно для непрораммистов, готовые интерфейсыДополнительная нагрузка, может конфликтовать с кастомным кодом
Как создать автоматические уведомления о обновлениях плагинов WordPress
05.02.2026
WooCommerce: как отключить сравнение товаров в личном кабинете
18.05.2026
Как создать уникальные метаданные для каждого типа записей WordPress
16.01.2026
WooCommerce: как отключить автоматическое обновление статуса заказов
10.06.2026
Как создать автоматический отчет о проблемах безопасности WordPress
21.03.2026