WooCommerce: создание и использование собственных статусов заказов

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

Стандартные статусы WooCommerce (например, processing, completed, on-hold) подходят не для всех бизнес-сценариев. Например, если вам нужно внедрить промежуточные этапы обработки заказа, такие как "Ожидает подтверждения", "Сборка заказа" или "Передано в службу доставки", стандартный набор не позволяет это сделать без дополнительной доработки. Отсутствие нужных статусов усложняет контроль и автоматизацию.

Как создать собственный статус заказа в WooCommerce

Регистрация статуса с помощью фильтра wc_order_statuses и хука register_post_status

Для добавления нового статуса нужно зарегистрировать его в WordPress и добавить в список статусов WooCommerce. Ниже пример создания статуса Ожидает подтверждения с кодом wc-awaiting-confirmation:

add_action('init', function() {
    register_post_status('wc-awaiting-confirmation', [
        'label'                     => _x('Ожидает подтверждения', 'Order status', 'woocommerce'),
        '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')
    ]);
});

add_filter('wc_order_statuses', function($order_statuses) {
    $new_statuses = [];
    // Вставляем новый статус после processing
    foreach ($order_statuses as $key => $status) {
        $new_statuses[$key] = $status;
        if ('wc-processing' === $key) {
            $new_statuses['wc-awaiting-confirmation'] = 'Ожидает подтверждения';
        }
    }
    return $new_statuses;
});

Добавление статуса в админку и выбор при редактировании заказа

Новый статус автоматически появится в списке статусов при редактировании заказа и в фильтрах списка заказов. Для корректного отображения в интерфейсе можно дополнительно добавить CSS-стили в админку:

add_action('admin_head', function() {
    echo '<style>
    .order-status.status-awaiting-confirmation {
        background: #ffba00;
        color: #000;
    }
    </style>';
});

Автоматизация смены статуса: пример перевода заказа в новый статус после оплаты

Пример кода, который автоматически меняет статус заказа на wc-awaiting-confirmation после успешной оплаты (стандартный переход из pending в processing заменяется):

add_action('woocommerce_payment_complete', function($order_id) {
    $order = wc_get_order($order_id);
    if ($order) {
        $order->update_status('awaiting-confirmation');
    }
});

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

  • Создайте новый заказ с оплатой (например, через тестовый платеж).
  • Перейдите в админку WooCommerce - Заказы.
  • Проверьте, что заказ получил статус Ожидает подтверждения.
  • При редактировании заказа вы должны видеть новый статус в выпадающем списке статусов.
  • Статус должен отображаться цветом (если применили CSS из примера).

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

  • Статус не появляется в списке заказов: проверьте, что функция register_post_status вызывается на init, и что ключ статуса начинается с wc-.
  • Статус не применился автоматически после оплаты: убедитесь, что хук woocommerce_payment_complete сработал корректно, и что используется правильный код статуса без префикса wc- при вызове update_status.
  • Статус не отображается в интерфейсе или без нужного цвета: добавьте CSS в админку, проверьте селекторы и класс status- с ключом статуса без wc-.

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

  • Избегайте чрезмерного добавления большого количества кастомных статусов, чтобы не усложнять интерфейс.
  • Кэширование: после добавления статусов очистите кэш сайта и браузера, чтобы увидеть изменения.
  • Используйте префикс wc- для ключей статусов, чтобы WooCommerce корректно их распознавал.
  • Проверяйте совместимость с плагинами, которые работают с заказами (например, CRM или службы доставки), чтобы не нарушать их логику.

Сравнение вариантов добавления собственных статусов

МетодОписаниеПлюсыМинусы
Код в functions.php или кастомном плагине Ручная регистрация через register_post_status и фильтры Полный контроль, легко адаптировать Требует навыков программирования
Плагин Custom Order Statuses Графический интерфейс для создания статусов Просто для новичков, быстро Может добавлять лишний функционал, зависит от стороннего кода
WooCommerce: установка ограничений на количество товаров в корзине
28.06.2026
WooCommerce: автоматическое отключение платежей при неуспешной оплате
27.05.2026
Автоматическое удаление спама в комментариях WordPress
18.02.2026
Как установить ограничение на число одновременных авторизаций в WordPress
28.03.2026
WooCommerce: как запретить добавление дубликатов товаров в корзину
04.05.2026