WooCommerce při vytváření objednávky, používá několik výchozích stavů, které použije pro označení stavu, v kterém se objednávka nachází. Tyto stavy jdou poměrně jednoduše rozšířit.
Objednávka je technicky post type. To znamená, že má stejné prvky, jako post a pro stavy objednávek se používá post status. Každý post má stavy draft, publish atd. WordPress umožňuje registrovat vlastní stavy pomocí register_post_status.
Toho využívá i WooCommerce a rozšiřuje stavy postů o:
Pending payment (čeká na platbu) – při vytvoření objednávky, když ještě nebyla zpracována platební metoda.
On hold (čeká na vyřízení) – vytvořená objednávka, jsou třeba další kroky, typicky se jedná o bankovní převod, kdy čekáte na peníze, aby jste poslali objednávku zákazníkovi.
Processing (zpracovává se) – stav, kdy je objednávka již ve zpracovávání, ale není dokončená. Používám pro platbu kartou, nebo při odeslání zásilky na dobírku.
Completed (dokončeno) – dokončená objednávka.
Cancelled (zrušeno) – úspěšná objednávka, která byla zrušena.
Failed (selhalo) – neúspěšná objednávka, většinou se jedná o technickou chybu, nebo zrušení platby na platební brány.
Refunded (vráceno) – stav objednávky po vrácení.
O stavech objednávky jsem psal již dříve v návodu k WooCommerce
Registrace stavů objednávky
WooCommerce registruje vlastní stavy postů v souboru wc-class-post-types.php v metodě register_post_types. Zde je nadefinováno pole polí, které jsou pak procházeny a používány jako argumenty pro register_post_status.
Celé nadefinované pole máte k dispozici pomocí filtru woocommerce_register_shop_order_post_statuses .
1. Definování stavu objednávky
Pro definici potřebujete zadat:
- id stavu – wc-custom-status (stav objednávky musí vždy začínat wc-)
- label – název stavu – Custom status
- public – zobrazení stavu postu na frontendu (vždy false pro stav objednávky)
- exclude_from_search – vyloučení postů z vyhledávání (false)
- show_in_admin_all_list – zobrazení v adminu (true)
- show_in_admin_status_list – zobrazení v seznamu stavů (true)
- label_count – název pro zobrazení počtu objednávek s tímto stavem
2. Přidání stavu do seznamu výchozích stavů
Jako druhý krok, musíme přidat nový stav do seznamu všech stavů ve Woocommerce. Toto se používá například v detailu objednávky, pro vykreslení selectu se stavy objednávek.
WooCommerce má filtr wc_order_statuses, kam vložíte již nadefinované id stavu a název stavu.
3. Přidání do hromadných úprav
Posledním krokem je přidání stavu do hromadných úprav, aby bylo možné v administraci objednávek, hromadně označit více objednávek novým stavem.
Proto se používá filtr bulk_actions-edit-shop_order, kam id bulk akce a její název. Pozor na to, že, nyní již nesmíme použít prefix wc- , ale mark_.
4. Kompletní kód pro vytvoření stavu
Všechny tři kroky pak v kódu vypadají takto:
Tím jste do e-shopu přidali nový vlastní stav, ale většinou není práce u konce, protože na stavy objednávek navazují také další kroky, jako třeba odeslání e-mailu. Také je většinou potřeba přidat tlačítko do akcí objednávek, ale to bude tématem jiného článku.
Další užitečné snippety najdete na stránce Užitečné snippety pro WooCommerce