Vous souhaitez donner à vos clients la possibilité de modifier leurs commandes "en cours de traitement" depuis votre boutique WooCommerce ?
Si vous gérez un site e-commerce, vous avez forcément déjà reçu des demandes de vos clients afin de modifier des commandes qu'ils viennent de passer et de payer. Cette fonctionnalité n'existe malheureusement pas nativement avec WooCommerce. Pour cela, cet article vous guidera, étape par étape, afin d'ajouter facilement le code requis à votre boutique en ligne pour permettre à vos clients de modifier leurs commandes en cours de traitement.
Pour donner vos clients la possibilité de modifier leurs commandes en cours, vous aurez besoin d'installer le plugin gratuit Code Snippets afin de pouvoir ajouter des extraits de code à votre site WooCommerce :
Maintenant que le plugin "Code Snippets" a été installé avec succès, on s'en servira afin d'ajouter l'extrait de code qui va permettre à vos clients de modifier leurs commandes "en cours" sur votre site WooCommerce.
Pour ajouter un nouvel extrait de code à votre site en utilisant le plugin que vous venez d'installer :
Une fois l'extrait de code crée, il ne manque plus qu'à copier-coller le code permettant de réaliser les modifications recherchées.
L'extrait de code permettant la modification des commandes en cours de traitement de votre site WooCommerce provient du site Business Bloomers, vous n'aurez plus qu'à le copier-collier dans la zone code de votre extrait de code que vous venez de créer.
Voici l'extrait de code à copier-coller :
/** * @snippet Edit Order Functionality @ WooCommerce My Account Page * @sourcecode https://businessbloomer.com/?p=91893 * @author Rodolfo Melogli */ // ---------------- // 1. Allow Order Again for Processing Status add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'bbloomer_order_again_statuses' ); function bbloomer_order_again_statuses( $statuses ) { $statuses[] = 'processing'; return $statuses; } // ---------------- // 2. Add Order Actions @ My Account add_filter( 'woocommerce_my_account_my_orders_actions', 'bbloomer_add_edit_order_my_account_orders_actions', 50, 2 ); function bbloomer_add_edit_order_my_account_orders_actions( $actions, $order ) { if ( $order->has_status( 'processing' ) ) { $actions['edit-order'] = array( 'url' => wp_nonce_url( add_query_arg( array( 'order_again' => $order->get_id(), 'edit_order' => $order->get_id() ) ), 'woocommerce-order_again' ), 'name' => __( 'Edit Order', 'woocommerce' ) ); } return $actions; } // ---------------- // 3. Detect Edit Order Action and Store in Session add_action( 'woocommerce_cart_loaded_from_session', 'bbloomer_detect_edit_order' ); function bbloomer_detect_edit_order( $cart ) { if ( isset( $_GET['edit_order'], $_GET['_wpnonce'] ) && is_user_logged_in() && wp_verify_nonce( wp_unslash( $_GET['_wpnonce'] ), 'woocommerce-order_again' ) ) WC()->session->set( 'edit_order', absint( $_GET['edit_order'] ) ); } // ---------------- // 4. Display Cart Notice re: Edited Order add_action( 'woocommerce_before_cart', 'bbloomer_show_me_session' ); function bbloomer_show_me_session() { if ( ! is_cart() ) return; $edited = WC()->session->get('edit_order'); if ( ! empty( $edited ) ) { $order = new WC_Order( $edited ); $credit = $order->get_total(); wc_print_notice( 'A credit of ' . wc_price($credit) . ' has been applied to this new order. Feel free to add products to it or change other details such as delivery date.', 'notice' ); } } // ---------------- // 5. Calculate New Total if Edited Order add_action( 'woocommerce_cart_calculate_fees', 'bbloomer_use_edit_order_total', 20, 1 ); function bbloomer_use_edit_order_total( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $edited = WC()->session->get('edit_order'); if ( ! empty( $edited ) ) { $order = new WC_Order( $edited ); $credit = -1 * $order->get_total(); $cart->add_fee( 'Credit', $credit ); } } // ---------------- // 6. Save Order Action if New Order is Placed add_action( 'woocommerce_checkout_update_order_meta', 'bbloomer_save_edit_order' ); function bbloomer_save_edit_order( $order_id ) { $edited = WC()->session->get( 'edit_order' ); if ( ! empty( $edited ) ) { // update this new order update_post_meta( $order_id, '_edit_order', $edited ); $neworder = new WC_Order( $order_id ); $oldorder_edit = get_edit_post_link( $edited ); $neworder->add_order_note( 'Order placed after editing. Old order number: <a href="' . $oldorder_edit . '">' . $edited . '</a>' ); // cancel previous order $oldorder = new WC_Order( $edited ); $neworder_edit = get_edit_post_link( $order_id ); $oldorder->update_status( 'cancelled', 'Order cancelled after editing. New order number: <a href="' . $neworder_edit . '">' . $order_id . '</a> -' ); WC()->session->set( 'edit_order', null ); } }
La dernière étape consiste à tester la nouvelle fonctionnalité de votre site WooCommerce et vous assurer qu'elle fonctionne correctement.
Lorsqu'un de vos clients décide de modifier sa commande en cours de traitement, il aura un nouveau bouton "Modifier la commande" dans la section "Commandes" de son compte. En cliquant sur ce bouton, tous les produits de la commande concernée seront ajoutés à son panier et un crédit correspondant au montant de la commande est ajouté.
Lorsque le client finalise et paie sa nouvelle commande, l'ancienne sera annulée et il ne payera que la différence.
Si vous souhaitez réaliser des modifications à votre site internet ou si vous vous avez des questions, n'hésitez à nous contacter, on se fera un plaisir de répondre à votre demande.