Как добавить и настроить собственные статусы заказов WooCommerce без плагина

Почему нужен кастомный статус заказа в WooCommerce

Стандартные статусы WooCommerce (ожидает оплаты, в обработке, выполнен и т.д.) не всегда подходят для всех бизнес-процессов. Например, для магазинов с длительной обработкой заказов, предзаказами или дополнительной верификацией клиента часто требуется добавить собственные статусы. Это поможет точно отражать этапы обработки и улучшит коммуникацию с покупателями.

Диагностика: Как понять, что стандартных статусов недостаточно

  • Вам сложно отследить на каком этапе находится заказ из-за недостатка статусов.
  • Необходима автоматизация действий при переходе заказа в определенный статус.
  • Вы хотите информировать клиентов о промежуточных этапах (например, "Ожидание подтверждения", "Готовится к отправке").

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

1. Регистрируем новый статус заказа

Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

function wpfactory_register_custom_order_status() {
    register_post_status( 'wc-awaiting-confirmation', 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>' )
    ) );
}
add_action( 'init', 'wpfactory_register_custom_order_status' );

2. Добавляем новый статус в список статусов WooCommerce

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

function wpfactory_add_custom_order_statuses( $order_statuses ) {
    $new_statuses = array();

    // Вставляем новый статус после «wc-processing»
    foreach ( $order_statuses as $key => $status ) {
        $new_statuses[ $key ] = $status;

        if ( 'wc-processing' === $key ) {
            $new_statuses['wc-awaiting-confirmation'] = 'Ожидание подтверждения';
        }
    }

    return $new_statuses;
}
add_filter( 'wc_order_statuses', 'wpfactory_add_custom_order_statuses' );

3. Автоматизируем смену статуса (опционально): пример перехода из «в обработке» в новый статус через 2 дня

function wpfactory_automatic_status_change() {
    $orders = wc_get_orders( array(
        'status' => 'processing',
        'limit'  => -1,
        'date_created' => '<' . ( time() - 2 * DAY_IN_SECONDS ),
    ) );

    foreach ( $orders as $order ) {
        $order->update_status( 'awaiting-confirmation', 'Автоматический переход в статус ожидания подтверждения после 2 дней.', true );
    }
}
add_action( 'wp_loaded', 'wpfactory_automatic_status_change' );

Проверка результата

  • В админке WooCommerce в списке заказов должен появиться новый статус «Ожидание подтверждения».
  • При редактировании заказа новый статус должен быть доступен для выбора.
  • Если настроен автоматический переход, заказы старше 2 дней со статусом «В обработке» должны менять статус на новый.

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

  • Статус не отображается в списках: забыли добавить статус в фильтр wc_order_statuses.
  • Статус не сохраняется при смене вручную: не зарегистрировали статус через register_post_status с ключом wc- и параметрами public и show_in_admin_all_list.
  • Конфликты с плагинами: некоторые плагины могут не поддерживать кастомные статусы, требуется проверять совместимость.
  • Автоматическое изменение статуса не работает: ошибка в условии выборки заказов, неверный хук или отсутствие вызова CRON для периодической проверки.

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

  • Не используйте добавление статусов напрямую в core WooCommerce — только через хуки и фильтры.
  • Для массовых операций с заказами используйте WP-CRON или системные CRON-задачи, чтобы не нагружать сайт.
  • Проверяйте, чтобы ключи статусов начинались с wc-, иначе WooCommerce не распознает их.
  • Добавьте локализацию текстов с помощью функций __() или _e() для поддержки мультиязычности.

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

МетодПлюсыМинусы
Ручное добавление через код (хуки и фильтры)Полный контроль, нет зависимостей, легковесноТребует навыков программирования, возможны ошибки при неправильной реализации
Плагины (например, "WooCommerce Order Status Manager")Удобный интерфейс, дополнительные функции (уведомления, автоматизация)Дополнительная нагрузка на сайт, возможны конфликты, платные функции
Как решить проблему с неработающим автоматическим удалением забытых корзин в WooCommerce
06.07.2026
Как сделать автоматические отзывы с оценками в WordPress
17.01.2026
Как использовать хуки в WordPress: практическое руководство
19.11.2025
Как использовать функцию wc_get_products для эффективного получения товаров WooCommerce
11.07.2026
Как удалить старые вариации товаров в WooCommerce без потери данных
17.05.2026