Cum să creezi un status personalizat pentru comenzi în WooCommerce!

21 aug. 2015, 14:32:04
Vizualizări: 24.2K
Voturi: 13

Am încercat codul de mai jos pentru a crea un status personalizat.

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

Dar nu funcționează. Am încercat și alte metode. Poate cineva să mă ajute cu acest lucru..

0
Toate răspunsurile la întrebare 2
7
17

Iată ce am folosit pentru a crea un status personalizat de comandă numit "Facturat". Adaugă acest cod în fișierul functions.php al temei tale.

// Noul status de comandă DUPĂ WooCommerce 2.2
add_action( 'init', 'register_my_new_order_statuses' );

function register_my_new_order_statuses() {
    register_post_status( 'wc-invoiced', array(
        'label'                     => _x( 'Facturat', 'Status comandă', 'woocommerce' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Facturat <span class="count">(%s)</span>', 'Facturat<span class="count">(%s)</span>', 'woocommerce' )
    ) );
}

add_filter( 'wc_order_statuses', 'my_new_wc_order_statuses' );

// Înregistrare în lista de statusuri wc_order_statuses
function my_new_wc_order_statuses( $order_statuses ) {
    $order_statuses['wc-invoiced'] = _x( 'Facturat', 'Status comandă', 'woocommerce' );

    return $order_statuses;
}

Pentru a adăuga noul tău status în meniul dropdown Bulk-edit din administrare, trebuie să folosești JavaScript. Adaugă funcția ta la acțiunea admin_footer. Funcția mea arată astfel:

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( 'Marchează ca facturat', 'textdomain' ); ?>').appendTo("select[name='action']");
                            jQuery('<option>').val('mark_invoiced').text('<?php _e( 'Marchează ca facturat', 'textdomain' ); ?>').appendTo("select[name='action2']");   
                        });
                    </script>
                <?php
            }
        }

Acțiunea este adăugată de două ori deoarece există o acțiune în masă în partea de sus și alta în partea de jos a listei de comenzi.

21 aug. 2015 14:57:11
Comentarii

@AparnaMathew mă bucur că funcționează. :)

Magnetize Magnetize
24 aug. 2015 10:50:18

Aceasta adaugă statusul pe ecranul comenzii individuale, iar odată ce marchezi o comandă cu acest nou status, îl vei vedea în navigarea de deasupra listei de comenzi (adică Toate, Ale mele, În așteptare etc.), dar nu îl adaugă în meniul dropdown pentru editarea în masă. Ai vreo idee, @Magnetize?

Nathan Nathan
2 iun. 2018 02:03:32

@Nathan Salut! Da, am o soluție, dar trebuie să adaugi acțiunile în masă prin js. Am editat răspunsul meu deoarece este prea lung pentru un comentariu.

Magnetize Magnetize
4 iun. 2018 11:03:59

Acest lucru se mai aplică și pentru WooCommerce 3.x?

Amjad Amjad
10 iun. 2018 00:01:03

@Amjad da, se aplică, folosesc soluția chiar acum. :)

Magnetize Magnetize
10 iun. 2018 11:50:48

Confirm că funcționează și pe versiunea 3.x. Mulțumesc @Magnetize!

Amjad Amjad
12 iun. 2018 01:12:34

Și cum ar fi să facem suma pentru comenzi în panoul de control WooCommerce?

David David
26 mar. 2019 10:25:49
Arată celelalte 2 comentarii
0

Ca o completare a celor de mai sus și pentru a nu folosi JavaScript pentru a adăuga acțiunile în lista de acțiuni în masă, pentru a adăuga/reașepta acțiunile în masă poți folosi hook-ul bulk_actions-edit-shop_order. De exemplu:

function rename_or_reorder_bulk_actions( $actions ) {
    $actions = array(
        // aceasta este ordinea în care acțiunile sunt afișate; le poți schimba
        'mark_processing'      => __( 'Marchează ca plasat', 'textdomain' ), // rescriere a unui status existent
        'mark_invoiced'        => __( 'Marchează ca facturat', 'textdomain' ), // adăugarea unuia nou
        '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 );

Noroc!

3 oct. 2018 14:49:08