Egyedi WooCommerce állapotok tömeges használata a Csoportműveletek menüben előnézeti képe

Egyedi WooCommerce állapotok tömeges használata a Csoportműveletek menüben

| Olvasási idő: 1 perc

Korábban már hoztunk létre egyedi rendelési állapotokat WooCommerce-ben, az élelmesebbek azonban észrevehették, hogy a Bulk Action ("Csoportműveletek") menübe ezek az állapotok nem kerültek be. Ezzel a snippettel erről fogunk gondoskodni. 

Fontos információ, hogy továbbra is a saját egyedi rendelési állapotaink neveivel fogunk dolgozni (vagyis Gyártás alatt - wc-manufacturing és Csomagolás alatt - wc-packing). Hozzunk létre egy fájlt az mu-plugins mappánkban, mondjuk add-custom-order-statuses-to-bulk-edit-menu.php néven, az alábbi tartalommal: 

php
<?php
/*
Plugin Name: Add custom order statuses to bulk edit menu
Plugin URI: https://www.webmenedzser.hu
Description: Add custom order statuses to bulk edit menu
Version: 1.0
Author: Maxim Kaminsky, Radics Ottó
Author URI: https://maxim-kaminsky.com/blog/how-to-add-bulk-actions-to-woocommerce-orders-list/
License: GPLv3
*/

/**
 * Adjuk hozzá az egyedi rendelési állapotainkhoz tartozó menü elemeket a menühöz.
 */
add_filter( 'bulk_actions-edit-shop_order', 'plugout_add_actions_to_bulk_edit_menu', 1, 1);
function plugout_add_actions_to_bulk_edit_menu($actions) {
    $actions['set-wc-manufacturing'] = __('Change status to manufacturing', 'plugout');
    $actions['set-wc-packing'] = __('Change status to packing', 'plugout');

    return $actions;
}

/**
 * "Kapjuk el" az akciónkat az alapján, hogy rendelésről van-e szó, és ha igen,
 * az akció "handle"-je `set-`-tel kezdődik-e.
 */
add_action( 'admin_init', 'plugout_catch_action_from_bulk_edit_menu');
function plugout_catch_action_from_bulk_edit_menu() {
    if ( !isset($_GET['post_type']) || $_GET['post_type'] != 'shop_order' ) {
        return;
    }

    if ( isset($_GET['action']) && 'set-' === substr( $_GET['action'], 0, 4 ) ) {
        // Check Nonce
        if ( !check_admin_referer('bulk-posts') ) {
            return;
        }

        // Remove 'set-' from action
        $new_status =  substr( $_GET['action'], 4 );

        $posts = $_GET['post'];

        foreach ($posts as $postID) {
            if ( !is_numeric($postID) ) {
                continue;
            }

            $order = new WC_Order( (int)$postID );
            $order->update_status( $new_status, __('Status updated through bulk edit menu.', 'plugout') );
        }
    }
}

Két függvényből áll a snippet: az elsővel hozzáadjuk a menühöz az általunk használni kívánt elemeket, a másodikkal pedig betesszük ezek mögé a "logikát". Fontos, hogy az $actions tömbbe felvenni kívánt elem kulcsa set--tel kezdődjön: egyébként nem fogja a második függvény "elkapni" és feldolgozni a beküldőtt űrlapot. 

Készen is vagyunk! :)