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

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

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

Проверьте, сталкиваетесь ли вы с одной из этих ситуаций:

  • Невозможно визуально отделить заказы на этапе проверки оплаты от тех, что готовы к отправке.
  • Отсутствует статус для возврата или обмена, что затрудняет учёт таких заказов.
  • Менеджеры путаются, какой статус соответствует текущему этапу обработки.

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

1. Регистрация кастомного статуса

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

function wpbest_register_custom_order_status() {
    register_post_status( 'wc-awaiting-payment', array(
        '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_action( 'init', 'wpbest_register_custom_order_status' );

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

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

function wpbest_add_custom_order_statuses( $order_statuses ) {
    $order_statuses['wc-awaiting-payment'] = _x( 'Ожидание оплаты', 'Order status', 'woocommerce' );
    return $order_statuses;
}
add_filter( 'wc_order_statuses', 'wpbest_add_custom_order_statuses' );

3. Использование статуса в логике магазина

Теперь вы можете назначать статус awaiting-payment в админке и использовать его в коде, например, для фильтрации заказов:

$args = array(
    'status' => 'wc-awaiting-payment',
    'limit' => -1,
);
$orders = wc_get_orders( $args );

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

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

  • Перейдите в WooCommerce → Заказы и проверьте наличие нового статуса в фильтрах.
  • Откройте любой заказ, попытайтесь изменить статус на «Ожидание оплаты» — статус должен отобразиться и сохраниться.
  • Используйте функцию wc_get_orders с новым статусом для выборки заказов в коде.

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

  • Статус не отображается в админке: проверьте, что хук init используется правильно, и код добавлен в активную тему или плагин.
  • Статус не сохраняется при редактировании заказа: убедитесь, что префикс wc- перед статусом сохранён, иначе WooCommerce не распознает его.
  • Статус не отображается на страницах магазина: кастомные статусы нужно регистрировать с параметром 'public' => true и разрешать отображение в списках.

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

  • Добавляйте кастомные статусы только если действительно есть необходимость — избыток статусов усложняет логику и интерфейс.
  • Храните кастомные коды статусов в отдельном плагине, чтобы не потерять при смене темы.
  • Используйте кеширование запросов wc_get_orders при массовой обработке заказов с кастомными статусами.
  • Следите за правами пользователей — разрешайте менять статусы только доверенным ролям.

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

МетодПлюсыМинусы
Код в functions.phpПростой, быстрое внедрениеРиск потери при смене темы, затруднено масштабирование
Отдельный плагинУстойчивость к смене темы, удобство управленияТребует навыков создания плагинов
Плагины из репозиторияГотовые решения без кодаМожет быть избыточно, не всегда настраиваемо под задачи
Как откатить обновление WordPress до предыдущей версии
05.04.2026
Как создать отслеживание событий в WordPress с помощью REST API
17.12.2025
Как исправить ошибку 429 в WooCommerce: практическое руководство
31.05.2026
Как использовать шорткоды для динамического контента в WordPress
15.02.2026
Как удалить пустые категории в WordPress с помощью кода
16.04.2026