wake-up-neo.com

So erstellen Sie einen benutzerdefinierten Bestellstatus im Woocommerce!

Ich habe versucht, mit dem folgenden Code einen benutzerdefinierten Status zu erstellen.

add_action( 'init', function() {
    $term = get_term_by( 'name', 'shipped', 'shop_order_status' );
    if ( ! $term ) {
        wp_insert_term( 'shipped', 'shop_order_status' );
    }
} );

Aber es funktioniert nicht. Ich habe auch andere Methoden ausprobiert. Bitte kann mir jemand dabei helfen ..

7
Aparna Mathew

Dies ist, was ich verwendet habe, um einen benutzerdefinierten Bestellstatus mit dem Namen "In Rechnung gestellt" zu erstellen. Fügen Sie dies der functions.php Ihres Themas hinzu

// New order status AFTER woo 2.2
add_action( 'init', 'register_my_new_order_statuses' );

function register_my_new_order_statuses() {
    register_post_status( 'wc-invoiced', array(
        'label'                     => _x( 'Invoiced', '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( 'Invoiced <span class="count">(%s)</span>', 'Invoiced<span class="count">(%s)</span>', 'woocommerce' )
    ) );
}

add_filter( 'wc_order_statuses', 'my_new_wc_order_statuses' );

// Register in wc_order_statuses.
function my_new_wc_order_statuses( $order_statuses ) {
    $order_statuses['wc-invoiced'] = _x( 'Invoiced', 'Order status', 'woocommerce' );

    return $order_statuses;
}

Um Ihren neuen Status in die Bulk-Edit-Dropdown-Liste des Administrators aufzunehmen, müssen Sie Javascript verwenden. Fügen Sie der Aktion admin_footer Ihre Funktion hinzu. Meine Funktion sieht dann so aus:

function custom_bulk_admin_footer() {
            global $post_type;

            if ( $post_type == 'shop_order' ) {
                ?>
                    <script type="text/javascript">
                        jQuery(document).ready(function() {
                            jQuery('<option>').val('mark_invoiced').text('<?php _e( 'Mark invoiced', 'textdomain' ); ?>').appendTo("select[name='action']");
                            jQuery('<option>').val('mark_invoiced').text('<?php _e( 'Mark invoiced', 'textdomain' ); ?>').appendTo("select[name='action2']");   
                        });
                    </script>
                <?php
            }
        }

Die Aktion wird zweimal hinzugefügt, da sich eine Sammelaktion oben und eine weitere unten in der Bestellliste befindet.

10
Magnetize

Um die obigen Punkte zu vervollständigen und kein JavaScript zu verwenden, um die Aktionen in der Liste der Massenaktionen hinzuzufügen, können Sie den Hook bulk_actions-edit-shop_order verwenden, um Massenaktionen hinzuzufügen/neu zu ordnen. Zum Beispiel:

function rename_or_reorder_bulk_actions( $actions ) {
    $actions = array(
        // this is the order in which the actions are displayed; you can switch them
        'mark_processing'      => __( 'Mark placed', 'textdomain' ), // rewrite an existing status
        'mark_invoiced'        => __( 'Mark invoiced', 'textdomain' ), // adding a new one
        'mark_completed'       => $actions['mark_completed'],
        'remove_personal_data' => $actions['remove_personal_data'],
        'trash'                => $actions['trash'],
    );
    return $actions;
}
add_filter( 'bulk_actions-edit-shop_order', 'rename_or_reorder_bulk_actions', 20 );

Prost!

2
Vlăduț Ilie