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 (%s)', 'Control order (%s)', '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.
Další užitečné snippety najdete na stránce Užitečné snippety pro WooCommerce