V říjnu byla vydána aktualizace WooCommerce, která v sobě měla jednu nepříjemnou změnu a to odlišný přístup k definování statusu objednávky. Bohužel je tato změna zpětně nekompatibilní a řada funkcí, nebo pluginů, které toto v sobě mají, může být nefunkční.
Na to, že tvůrci pluginů budou hned upravovat své produkty se nemůžete spolehnout, viz. tady . Náprava naštěstí není složitá, i když mi to chvíli zabralo, než jsem na to přišel.
Původní vytvoření custom order status byl ve vytvoření nového termu. V podstatě stačilo použít tuto funkci
function add_custom_status(){ $term = get_term_by( 'name', 'Custom status', 'shop_order_status' ); if ( ! $term ) { wp_insert_term( 'Custom status', 'shop_order_status' ); } } |
V polovině září se však použití termu změnilo na status postu. Objednávky ve WooCommerce jsou vlastně custom post type a jsou tak ukládány do tabulky wp_posts (wp_ dle aktuálního prefixu). A stavy objednávek tak byly taxonomie pro custom post type.
V rámci zjednodušení přístupu ke stavům, se vývojáři rozhodli vytvořit custom post statusy, které budou mít prefix wc. Takže objednávka ve stavu čekající, má v nyní post status wc-pending. A v tom je zakopaný pes.
Custom order status ve WooCommerce nově vytvoříte takto
add_action( 'init', 'register_custom_order_status', 5 ); function register_custom_order_status(){ register_post_status( 'wc-control', array( 'label' => _x( 'Custom status', 'Order status', 'woocommerce' ), 'public' => true, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Control order <span class="count">(%s)</span>', 'Control order <span class="count">(%s)</span>', 'woocommerce' ) ) ); } |
Samozřejmě všude, kde programátoři použili pro výpis objednávek s vlastním statusem, je potřeba upravit funkce, aby místo termu používaly post_status.
Doufám, že vám tip pomůže, protože na webu jsou nyní dohledatelné spíše starší návody.