web-dev-qa-db-fra.com

Comment créer un statut de commande personnalisé dans woocommerce!

J'ai essayé le code ci-dessous pour créer un statut personnalisé.

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

Mais ça ne fonctionne pas. J'ai essayé d'autres méthodes aussi. S'il vous plaît quelqu'un peut-il m'aider à ce sujet ..

7
Aparna Mathew

C'est ce que j'ai utilisé pour créer un statut de commande personnalisé appelé "Facturé". Ajoutez ceci à functions.php de votre thème

// 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;
}

Pour ajouter votre nouveau statut à la liste déroulante d'édition en bloc d'administration, vous devez utiliser javascript. Ajoutez votre fonction à l'action admin_footer. Ma fonction ressemble alors à ceci:

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

L'action est ajoutée deux fois car il y a une action en bloc en haut et une autre en bas de la liste de commande.

10
Magnetize

Pour compléter ce qui précède et ne pas utiliser JavaScript pour ajouter les actions dans la liste des actions en bloc, vous pouvez utiliser le hook bulk_actions-edit-shop_order pour ajouter/réorganiser des actions en bloc. Par exemple:

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 );

À votre santé!

2
Vlăduț Ilie