Accueil
A propos
Services
Nos Services
Vitrine
Présenter l'activité de votre société
E-Commerce
Vendre vos produits ou vos services
Sur Mesure
Développé selon vos besoins
Maintenance
Garder votre site en parfaite santé
Blog
KleverWeb logo

WooCommerce : Autoriser vos clients à modifier leurs commandes

Partager
Partager
Partager
Partager
Partager
KleverWeb logo bleu
KleverWeb - 
14 juin 2021

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.

Installer le plugin Code Snippets

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 :

  • Accédez à la page admin de votre boutique en ligne.
  • Cliquez sur la section "Extensions" puis "Ajouter".
  • Recherchez "Code Snippets" puis installez et activez le plugin.

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.

Créer un extrait de code pour modifier les commandes en cours

Pour ajouter un nouvel extrait de code à votre site en utilisant le plugin que vous venez d'installer :

  • Accédez à la page admin de votre site WooCommerce.
  • Cliquez sur la section "Extraits" puis "Nouveau".
  • Donnez un titre à votre extrait de code : "Modifier les commandes en cours de traitement".

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.

Copier-coller le code pour modifier vos commandes en cours

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

Tester votre nouvelle fonctionnalité

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.

envelopeuserscartsmartphonelaptop-phoneheart-pulsecodecrossmenuchevron-downchevron-right linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram