
🏪 Niestandardowe statusy zamówień WooCommerce: jak utworzyć i skonfigurować
Przetworzyli Państwo zamówienie, a standardowego statusu dla tego etapu nie ma. „Processing" dla kompletacji, „Completed" dla wysyłki, a pomiędzy nimi pustka. Sklep rośnie i siedem standardowych statusów WooCommerce przestaje wystarczać.
Własny status można dodać na dwa sposoby: parą linii kodu w functions.php lub gotową wtyczką. Obie opcje działają i nie psują standardowej logiki zamówień. Poniżej, krok po kroku, ze sprawdzonym kodem i alternatywą bez programowania.
💡 Szybki przegląd:
- Jakie statusy są w WooCommerce od razu po instalacji i dlaczego nie wystarczają
- Rejestracja niestandardowego statusu za pomocą kodu PHP
- Dodawanie wielu statusów i niestandardowych powiadomień e-mail
- Wtyczki do statusów zamówień, gdy kod nie wchodzi w grę
- Odpowiedzi na częste pytania: HPOS, kolory, usuwanie, tłumaczenie
Jakie statusy są w WooCommerce od razu po instalacji
Standardowo WooCommerce udostępnia siedem statusów zamówienia. Każdy jest sztywno powiązany z konkretnym punktem cyklu życia:
Status | Co oznacza |
|---|---|
Pending payment | Zamówienie utworzone, płatność nie wpłynęła |
Processing | Płatność otrzymana, zamówienie w realizacji |
Completed | Zamówienie zrealizowane i zamknięte |
On hold | Oczekiwanie na potwierdzenie płatności |
Cancelled | Anulowane przez kupującego lub administratora |
Refunded | Środki zwrócone |
Failed | Płatność nie powiodła się |
Dla typowego sklepu ten zestaw jest wystarczający. Jednak gdy tylko pojawia się własna logika obsługi, na przykład produkcja na zamówienie lub wieloetapowa dostawa, siedem statusów przestaje wystarczać. Potrzebny jest „W kompletacji", „Przekazano do dostawy", „Oczekuje na przedpłatę" lub „Wymaga weryfikacji przez menedżera".
Krok 1: Rejestracja niestandardowego statusu za pomocą kodu
Przed WooCommerce 3.0 dla statusów używano taksonomii shop_order_status, a dodanie nowego było nietrywialne. Teraz wszystko jest prostsze: status zamówienia to post status niestandardowego typu wpisu shop_order. Rejestruje się go jedną funkcją register_post_status() i filtrem wc_order_statuses.
Kod dodaje się do functions.php motywu potomnego. Przed jakimikolwiek zmianami proszę wykonać pełną kopię zapasową strony.
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' );
Po zapisaniu functions.php nowy status pojawi się na rozwijanej liście statusów zamówienia w panelu administracyjnym oraz w raportach WooCommerce. System widzi go jako pełnoprawny status, można filtrować zamówienia, zmieniać status ręcznie i używać go w hookach.
Co tu się dzieje
Funkcja register_post_status() tworzy nowy post status z prefiksem wc-, to konwencja WooCommerce. Parametr label określa czytelną nazwę w panelu administracyjnym. label_count, poprzez _n_noop(), odpowiada za poprawne wyświetlanie liczników w polskim interfejsie.
Filtr wc_order_statuses dodaje status do tablicy, której WooCommerce używa do budowania listy. Bez tego kroku status będzie zarejestrowany w systemie, ale nie pojawi się w rozwijanym menu zamówień.

Wizualnie rezultat wygląda właśnie tak, nowy status wyświetla się na ogólnej liście na równi ze standardowymi.
Krok 2: Dodawanie wielu statusów i powiadomień e-mail
Dla jednego statusu powyższy kod działa doskonale. Jeśli potrzeba kilku, wystarczy zduplikować register_post_status() wewnątrz tej samej funkcji i dodać wpis do tablicy $order_statuses. Na przykład dla sklepu z produkcją na zamówienie:
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' );
Proszę zwrócić uwagę: identyfikator statusu (pierwszy argument register_post_status) zawsze zaczyna się od wc-. Bez tego prefiksu WooCommerce nie rozpozna statusu.
Powiadomienia e-mail dla niestandardowych statusów
Standardowo WooCommerce nie wysyła wiadomości przy zmianie statusu na niestandardowy. Aby włączyć powiadomienia, należy dodać filtr 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' );
Następnie można skonfigurować szablon wiadomości w WooCommerce → Ustawienia → E-maile, nowy status pojawi się na liście wyzwalaczy do dostosowania. Szablon tworzy się w motywie potomnym w ścieżce woocommerce/emails/, plik nazywa się według maski customer-<статус>.php.
Wtyczki do statusów zamówień: gdy kod nie wchodzi w grę
Kod nie jest jedyną drogą. Jeśli nie chcą Państwo edytować functions.php lub statusy trzeba zmieniać często, są wtyczki. Dwie główne opcje:
WooCommerce Order Status Manager, oficjalne rozszerzenie od WooCommerce. Dodaje interfejs do tworzenia i edycji statusów bezpośrednio z panelu administracyjnego: WooCommerce → Ustawienia → Statusy zamówień. Obsługuje powiadomienia e-mail, ikony, kolory oraz import/eksport statusów. Płatne, wchodzi w skład niektórych planów WooCommerce.
Flexi Custom Order Status, bezpłatna wtyczka z katalogu WordPress.org. Również udostępnia edytor wizualny statusów, ale z mniejszym zestawem funkcji. Sprawdza się w podstawowych scenariuszach: dodanie statusu, przypisanie koloru, włączenie wiadomości e-mail.
Którą ścieżkę wybrać:
- Potrzebują Państwo jednego-dwóch statusów i nie boją się kodu, wystarczy
functions.php. - Statusów jest dużo, często się zmieniają lub stroną zarządza klient bez umiejętności technicznych, proszę wybrać wtyczkę.
- Jeśli korzystają Państwo z HPOS (High-Performance Order Storage), oba podejścia działają. Statusy nadal bazują na
register_post_status(), HPOS ich nie dotyczy.
Krótkie wideo powyżej pokazuje proces dodawania niestandardowego statusu w pięć minut, od instalacji wtyczki do pierwszego użycia w zamówieniach.
⁉️🤔 Częste pytania
Czy niestandardowy status działa z HPOS?
Tak, w pełni. HPOS zmienia sposób przechowywania danych zamówienia, ale nie dotyka post status. Funkcja
register_post_status()pozostaje głównym mechanizmem, Państwa kod będzie działał zarówno przy włączonym HPOS, jak i wyłączonym.
Czy można ustawić kolor dla niestandardowego statusu?
Poprzez kod, tylko stylami CSS w panelu administracyjnym: zaczepiają się Państwo o klasę
.status-wc-preparingi ustawiają tło. Wygodniej przez wtyczki: Order Status Manager i Flexi dają wizualny wybór koloru bez ani jednej linii kodu.
Jak usunąć utworzony status?
Proszę usunąć go z
register_post_status()i z filtrawc_order_statuses. Zamówienia z tym statusem nie znikną, zostaną zachowane w bazie, ale status przestanie się wyświetlać na rozwijanej liście. Przed usunięciem proszę przenieść wszystkie zamówienia z usuwanym statusem do innego, aby nie stracić ich z pola widzenia.
Jak przetłumaczyć statusy na inny język?
Parametr
labelwregister_post_status()przyjmuje ciąg znaków, proszę podać nazwę w żądanym języku. Jeśli strona jest wielojęzyczna, proszę opakować ciąg w wywołanie__()lub_x()z domeną tekstową i przetłumaczyć przez pliki.po/.mo, jak każdy inny tekst motywu.
Czy prefiks wc- jest obowiązkowy?
Tak. WooCommerce filtruje statusy według tego prefiksu. Jeśli zarejestrują Państwo status bez
wc-, nie pojawi się on w panelu administracyjnym zamówień. Wyjątek stanowią wtyczki: same dodają prefiks lub omijają filtrację wewnętrznymi mechanizmami.
Czy można dodać niestandardowy status bez kodu i bez wtyczki?
Bez kodu i bez wtyczki, nie. WooCommerce nie udostępnia interfejsu do tworzenia statusów od razu po instalacji. Minimalna ścieżka bez programowania to bezpłatny Flexi Custom Order Status z katalogu WordPress.org. Instalacja jednym kliknięciem, konfiguracja przez panel administracyjny.
Co zastosować do Państwa zadania
Niestandardowe statusy zamówień to jeden z tych mechanizmów WooCommerce, który łatwo przeoczyć, dopóki sklep jest mały. Ale gdy tylko pojawia się produkcja, etapowa logistyka lub ręczna weryfikacja zamówień, bez nich panel administracyjny zamienia się w chaos niezrozumiałych oznaczeń.
- Potrzebują Państwo jednego-dwóch statusów i edytowali już wcześniej
functions.php, kod z kroku 1 rozwiąże zadanie w pięć minut. - Potrzebny jest edytor wizualny i konfiguracja kolorów dla klienta, Flexi Custom Order Status (bezpłatny).
- Statusy są częścią złożonego procesu biznesowego ze scenariuszami e-mail i dziesiątkami etapów, WooCommerce Order Status Manager (oficjalne rozszerzenie).
Proszę sprawdzić, które podejście jest Państwu bliższe, i dodać pierwszy niestandardowy status już dziś. Jeśli korzystają Państwo z innego sposobu lub znają wtyczkę, której nie ma w artykule, proszę podzielić się w komentarzach.



