
🏪 Пользовательские статусы заказов WooCommerce: как создать и настроить
Обработали заказ, а стандартного статуса для этого этапа нет. «Processing» для сборки, «Completed» для отправки, а между ними пустота. Магазин растёт, и семи дефолтных статусов WooCommerce перестаёт хватать.
Добавить собственный статус можно двумя способами: парой строк кода в functions.php или готовым плагином. Оба варианта рабочие и не ломают стандартную логику заказов. Ниже, пошагово, с проверенным кодом и альтернативой без программирования.
💡 Быстрый обзор:
- Какие статусы идут в WooCommerce из коробки и почему их не хватает
- Регистрация пользовательского статуса через PHP-код
- Добавление нескольких статусов и кастомных email-уведомлений
- Плагины для статусов заказов, когда код не подходит
- Ответы на частые вопросы: HPOS, цвета, удаление, перевод
Какие статусы есть в WooCommerce из коробки
По умолчанию WooCommerce даёт семь статусов заказа. Каждый жёстко привязан к своей точке жизненного цикла:
Статус | Что значит |
|---|---|
Pending payment | Заказ создан, оплата не поступила |
Processing | Оплата получена, заказ в обработке |
Completed | Заказ выполнен и закрыт |
On hold | Ожидание подтверждения оплаты |
Cancelled | Отменён покупателем или администратором |
Refunded | Средства возвращены |
Failed | Платёж не прошёл |
Для типового магазина этого набора достаточно. Но как только появляется собственная логика обработки, например, производство на заказ или многоэтапная доставка, семи статусов перестаёт хватать. Нужен «В сборке», «Передан в доставку», «Ожидает предоплаты» или «Требует проверки менеджером».
Шаг 1: Регистрация пользовательского статуса через код
До WooCommerce 3.0 для статусов использовалась таксономия shop_order_status, и добавление нового было нетривиальным. Сейчас всё проще: статус заказа, это post status кастомного типа записи shop_order. Регистрируется одной функцией register_post_status() и фильтром wc_order_statuses.
Код добавляется в functions.php дочерней темы. Перед любыми правками сделайте полный бэкап сайта.
1 // Регистрация нового статуса заказа 2 function sdstudio_register_custom_order_status() { 3 register_post_status( 'wc-preparing', array( 4 'label' => 'В сборке', 5 'public' => true, 6 'exclude_from_search' => false, 7 'show_in_admin_all_list' => true, 8 'show_in_admin_status_list' => true, 9 'label_count' => _n_noop( 10 'В сборке (%s)', 11 'В сборке (%s)', 12 'sdstudio' 13 ), 14 ) ); 15 } 16 add_action( 'init', 'sdstudio_register_custom_order_status' ); 17 18 // Добавление статуса в список WooCommerce 19 function sdstudio_add_custom_order_status( $order_statuses ) { 20 $order_statuses['wc-preparing'] = 'В сборке'; 21 return $order_statuses; 22 } 23 add_filter( 'wc_order_statuses', 'sdstudio_add_custom_order_status' );
После сохранения functions.php новый статус появится в выпадающем списке статусов заказа в админке и в отчётах WooCommerce. Система видит его как полноценный статус, можно фильтровать заказы, менять статус вручную и использовать в хуках.
Что здесь происходит
Функция register_post_status() создаёт новый post status с префиксом wc-, это соглашение WooCommerce. Параметр label задаёт читаемое название в админке. label_count, через _n_noop(), отвечает за корректное отображение счётчиков в русском интерфейсе.
Фильтр wc_order_statuses добавляет статус в массив, который WooCommerce использует для построения списка. Без этого шага статус будет зарегистрирован в системе, но не появится в выпадающем меню заказов.

Визуально результат выглядит именно так, новый статус отображается в общем списке наравне со стандартными.
Шаг 2: Добавление нескольких статусов и email-уведомлений
Для одного статуса код выше работает отлично. Если нужно несколько, просто дублируете register_post_status() внутри той же функции и добавляете запись в массив $order_statuses. Например, для магазина с производством на заказ:
1 function sdstudio_register_multiple_statuses() { 2 // Статус «В производстве» 3 register_post_status( 'wc-in-production', array( 4 'label' => 'В производстве', 5 'public' => true, 6 'exclude_from_search' => false, 7 'show_in_admin_all_list' => true, 8 'show_in_admin_status_list' => true, 9 'label_count' => _n_noop( 10 'В производстве (%s)', 11 'В производстве (%s)', 12 'sdstudio' 13 ), 14 ) ); 15 16 // Статус «Готов к отправке» 17 register_post_status( 'wc-ready-to-ship', array( 18 'label' => 'Готов к отправке', 19 'public' => true, 20 'exclude_from_search' => false, 21 'show_in_admin_all_list' => true, 22 'show_in_admin_status_list' => true, 23 'label_count' => _n_noop( 24 'Готов к отправке (%s)', 25 'Готов к отправке (%s)', 26 'sdstudio' 27 ), 28 ) ); 29 } 30 add_action( 'init', 'sdstudio_register_multiple_statuses' ); 31 32 function sdstudio_add_multiple_statuses( $order_statuses ) { 33 $order_statuses['wc-in-production'] = 'В производстве'; 34 $order_statuses['wc-ready-to-ship'] = 'Готов к отправке'; 35 return $order_statuses; 36 } 37 add_filter( 'wc_order_statuses', 'sdstudio_add_multiple_statuses' );
Обратите внимание: идентификатор статуса (первый аргумент register_post_status) всегда начинается с wc-. Без этого префикса WooCommerce не подхватит статус.
Email-уведомления для кастомных статусов
По умолчанию WooCommerce не отправляет письма при смене статуса на пользовательский. Чтобы включить оповещения, добавьте фильтр woocommerce_email_actions:
1 function sdstudio_add_custom_status_email( $email_actions ) { 2 $email_actions[] = 'woocommerce_order_status_wc-preparing'; 3 $email_actions[] = 'woocommerce_order_status_wc-in-production'; 4 return $email_actions; 5 } 6 add_filter( 'woocommerce_email_actions', 'sdstudio_add_custom_status_email' );
После этого можно настроить шаблон письма в WooCommerce → Settings → Emails, новый статус появится в списке триггеров для кастомизации. Шаблон создаётся в дочерней теме по пути woocommerce/emails/, файл именуется по маске customer-<статус>.php.
Плагины для статусов заказов: когда код не подходит
Код, не единственный путь. Если править functions.php не хочется или статусы нужно менять часто, есть плагины. Два основных варианта:
WooCommerce Order Status Manager, официальное расширение от WooCommerce. Добавляет интерфейс для создания и редактирования статусов прямо из админки: WooCommerce → Settings → Order Statuses. Поддерживает email-уведомления, иконки, цвета и импорт/экспорт статусов. Платное, входит в некоторые тарифы WooCommerce.
Flexi Custom Order Status, бесплатный плагин из каталога WordPress.org. Тоже даёт визуальный редактор статусов, но с меньшим набором функций. Подходит для базовых сценариев: добавили статус, назначили цвет, включили письмо.
Какой путь выбрать:
- Нужен один-два статуса и вы не боитесь кода, хватит
functions.php. - Статусов много, они часто меняются или сайтом управляет клиент без технических навыков, берите плагин.
- Используете HPOS (High-Performance Order Storage), оба подхода работают. Статусы по-прежнему базируются на
register_post_status(), HPOS их не затрагивает.
Короткое видео выше показывает процесс добавления кастомного статуса за пять минут, от установки плагина до первого использования в заказах.
⁉️🤔 Частые вопросы
Работает ли кастомный статус с HPOS?
Да, полностью. HPOS меняет способ хранения данных заказа, но не трогает post status. Функция
register_post_status()остаётся основным механизмом, ваш код будет работать и при включённом HPOS, и при выключенном.
Можно ли задать цвет для кастомного статуса?
Через код, только CSS-стилями в админке: цепляетесь за класс
.status-wc-preparingи задаёте фон. Удобнее, через плагины: Order Status Manager и Flexi дают визуальный выбор цвета без единой строки кода.
Как удалить созданный статус?
Удалите его из
register_post_status()и из фильтраwc_order_statuses. Заказы с этим статусом не исчезнут, они сохранятся в базе, но статус перестанет отображаться в выпадающем списке. Перед удалением переведите все заказы с удаляемым статусом в другой, чтобы не потерять их из виду.
Как перевести статусы на другой язык?
Параметр
labelвregister_post_status()принимает строку, укажите название на нужном языке. Если сайт мультиязычный, оберните строку в вызов__()или_x()с текстовым доменом, и переводите через.po/.moфайлы как любой другой текст темы.
Обязательно ли префикс wc-?
Да. WooCommerce фильтрует статусы по этому префиксу. Если зарегистрировать статус без
wc-, он не появится в админке заказов. Исключение, плагины: они сами добавляют префикс или обходят фильтрацию внутренними механизмами.
Можно ли добавить кастомный статус без кода и без плагина?
Без кода и без плагина, нет. WooCommerce не даёт интерфейса для создания статусов из коробки. Минимальный путь без программирования, бесплатный Flexi Custom Order Status из каталога WordPress.org. Установка в один клик, настройка через админку.
Что ставить под вашу задачу
Кастомные статусы заказов, один из тех механизмов WooCommerce, который легко пропустить, пока магазин маленький. Но как только появляется производство, поэтапная логистика или ручная проверка заказов, без них админка превращается в хаос из невнятных пометок.
- Нужны один-два статуса и вы правили
functions.phpраньше, код из шага 1 закроет задачу за пять минут. - Нужен визуальный редактор и настройка цветов для клиента, Flexi Custom Order Status (бесплатный).
- Статусы, часть сложного бизнес-процесса с email-сценариями и десятками этапов, WooCommerce Order Status Manager (официальное расширение).
Проверьте, какой из подходов вам ближе, и добавьте первый кастомный статус уже сегодня. Если используете другой способ или знаете плагин, которого нет в статье, поделитесь в комментариях.



