Как использовать кастомные статусы заказов в 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Простой, быстрое внедрениеРиск потери при смене темы, затруднено масштабирование
Отдельный плагинУстойчивость к смене темы, удобство управленияТребует навыков создания плагинов
Плагины из репозиторияГотовые решения без кодаМожет быть избыточно, не всегда настраиваемо под задачи
Как отключить Gutenberg и вернуться к классическому редактору WordPress
15.01.2026
Как использовать шорткоды для динамического контента в WordPress
15.02.2026
Как добавить собственный тип записи (custom post type) в WordPress
29.11.2025
Как разрешить доступ к wp-admin по IP-адресам в WordPress
18.03.2026
Как создать автоматический sitemap в WordPress с помощью кода
06.03.2026