Cum să creezi un status personalizat pentru comenzi în WooCommerce!
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..

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.

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 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.

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!
