Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🏪 Niestandardowe statusy zamówień WooCommerce: jak utworzyć i skonfigurować

🏪 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// Регистрация нового статуса заказа
2function 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}
16add_action( 'init', 'sdstudio_register_custom_order_status' );
17
18// Добавление статуса в список WooCommerce
19function sdstudio_add_custom_order_status( $order_statuses ) {
20 $order_statuses['wc-preparing'] = 'В сборке';
21 return $order_statuses;
22}
23add_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ń.

Status zamówienia użytkownika w panelu administracyjnym WooCommerce

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:

1function 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}
30add_action( 'init', 'sdstudio_register_multiple_statuses' );
31
32function sdstudio_add_multiple_statuses( $order_statuses ) {
33 $order_statuses['wc-in-production'] = 'В производстве';
34 $order_statuses['wc-ready-to-ship'] = 'Готов к отправке';
35 return $order_statuses;
36}
37add_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:

1function 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}
6add_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-preparing i 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 filtra wc_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 label w register_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.