
🏪 Користувацькі статуси замовлень 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 (офіційне розширення).
Перевірте, який із підходів вам ближчий, і додайте перший кастомний статус уже сьогодні. Якщо використовуєте інший спосіб або знаєте плагін, якого немає в статті, поділіться в коментарях.



