Jak zobrazit vlastní stav objednávek ve WooCommerce a v hromadných akcí

Úvod

V průběhu těchto Vánoc jsem se setkal s neobvyklým problémem týkajícím se správy objednávek ve WooCommerce. Můj klient měl vyšší objem objednávek, a partnerská logistická firma zažívala v tomto období zvýšenou chybovost. Situace byla komplikována tím, že klient prodával produkt v předprodeji a fyzické naskladnění a odeslání zásilek bylo naplánováno na 17. prosince – tedy na velmi krátký termín, jelikož bylo garantováno doručení do Vánoc.

Bohužel, na trhu není k dispozici doplněk, který by nám vyhovoval a efektivně umožnil spravovat objednávky v předprodeji a přiřadit jim vlastní stav objednávky (v tomto případě „Předprodej“).

Abychom tento problém vyřešili rychle a bez velkých nákladů, rozhodl jsem se přidat nový vlastní stav objednávky a upravit filtr objednávek. Vzhledem k časovým omezením jsme se rozhodli neautomatizovat proces. Kolegové ze skladu si jednoduše vyfiltrovali objednávky ve výchozím stavu „Zpracovává se“ (pro zaplacené objednávky s fyzickým produktem) a konkrétní produkt v předprodeji (v našem případě knížku). Poté změnili stav objednávky na „Předprodej“ pomocí hromadné úpravy, což jim umožnilo mít lepší přehled o objednávkách v systému.

V tomto článku vám ukážu, jak přidat vlastní stav objednávek ve WooCommerce a jak jej zobrazit i v hromadných akcích. Celý proces je zdarma a nezabere více než 5 minut.

Postup přidání vlastního stavu objednávky ve WooCommerce

1. Přidání kódu do functions.php

Prvním krokem je implementace krátkého PHP kódu do souboru functions.php vaší šablony.
– V administraci WordPressu přejděte na Vzhled -> Editor souboru šablony -> functions.php.
– Zkopírujte následující kód a vložte jej na konec souboru functions.php:

// Přidání nového statusu objednávek "Předprodej"

add_filter( 'woocommerce_register_shop_order_post_statuses', 'ts_register_custom_order_status' );
function ts_register_custom_order_status( $order_statuses ) {
   // Status musí začínat "wc-"!
   $order_statuses['wc-predprodej'] = array(
      'label' => 'Předprodej',
      'public' => false,
      'exclude_from_search' => false,
      'show_in_admin_all_list' => true,
      'show_in_admin_status_list' => true,
      'label_count' => _n_noop( 'Předprodej <span class="count">(%s)</span>', 'Předprodej <span class="count">(%s)</span>', 'woocommerce' ),
);
   return $order_statuses;
}
add_filter( 'wc_order_statuses', 'ts_show_custom_order_status_single_order_dropdown' );
function ts_show_custom_order_status_single_order_dropdown( $order_statuses ) {
   $order_statuses['wc-predprodej'] = 'Předprodej';
   return $order_statuses;
}

// Přidání nového statusu objednávek do menu hromadných úprav

function ts_custom_dropdown_bulk_actions_shop_order( $actions ) {
    $new_actions = array();

    // Add new custom order status after processing
    foreach ($actions as $key => $action) {
        $new_actions[$key] = $action;
        if ('mark_processing' === $key) {
            $new_actions['mark_predprodej'] = __( 'Změnit stav na předprodej', 'woocommerce' );
        }
    }

    return $new_actions;
}
add_filter( 'bulk_actions-woocommerce_page_wc-orders', 'ts_custom_dropdown_bulk_actions_shop_order', 20, 1 );
add_filter( 'handle_bulk_actions-woocommerce_page_wc-orders', 'ts_custom_dropdown_bulk_actions_shop_order', 20, 1 );
2. Úprava kódu pro vlastní potřeby

V tuto chvíli se objeví nový stav „Předprodej“ což možná budete chtít změnit. Pro změnu se řiďte jednoduchým postupem. V kodu změňte „predprodej“ na svůj název stavu nepřesahující 18 písmen (včetně znaků) a bez diakritiky s malým počátečním písmenem (jedná se o část PHP kodu). U slova „Předprodej“ lze dosadit jakýkoliv název včetně diakritiky atd… (Jedná se o text zobrazený v administraci). Na závěr můžete změnit text ze „Změnit stav na ….“ na cokololiv budete chtít, ale předpokládám, že ve většině případů nebude potřeba tento text měnit.

3. Aktualizace souboru

Poté stačí kliknout na tlačítko „Aktualizovat soubor“, které se nachází na konci stránky.

Další poznámky

Ještě bych rád zmínil, že se jedná o vlastní PHP kod, což nezaručuje funkčnost u všech scénářů. Pro příklad uvedu, že klient posílá digitální produkt při změně stavu do „Dokončené“ ale v naší situaci došlo ke komplikaci, kdy se odeslal odkaz pro stažení digitálního produktu dříve a poté co se objednávka dostala do stavu „Předprodej“, tak se možnost stažení zrušila. Jedná se o specifický problém, který se po technické stránce neřešil ale podobné případy mohou nastat.