Comment compléter automatiquement les commandes WooCommerce lorsqu'elles passent au statut de traitement

Publié: 2019-04-06

Chaque site de commerce électronique nécessite le suivi et la gestion des commandes, ce qui peut être une tâche assez ardue pour l'administrateur, compte tenu du nombre de commandes qu'un site Web de commerce électronique moyen à fort trafic reçoit par jour. En ce qui concerne WooCommerce, une commande est créée dès que le processus de paiement est terminé (consultez le flux d'état de la commande WooCommerce ci-dessous).

Selon l'endroit où se trouve la commande dans la chaîne de paiement à la livraison, un statut lui est attribué. Ces statuts sont définis et/ou modifiés par WooCommerce, la passerelle de paiement et le propriétaire/administrateur du magasin en fonction de l'endroit où se trouve la commande.

Avant de jeter un coup d'œil au flux de commande dans WooCommerce, définissons le statut de la commande dans Woocommerce au profit des débutants.

Qu'est-ce que le statut de la commande dans WooCommerce ?

Le statut de la commande est une représentation de l'état actuel dans lequel se trouve une commande passée par le client . Le statut de la commande dans Woocommerce change au fur et à mesure que la commande est traitée jusqu'à l'étape de livraison ou de remboursement dans le cas où il y a un problème avec le produit/services et où le propriétaire du magasin a accepté de rembourser le client. Par exemple, lorsqu'un client passe une commande sur un certain produit, le statut de la commande suivante dans la séquence sera immédiatement défini, à savoir le «paiement en attente». Le paiement en attente est défini par défaut dans Woocommerce.

Maintenant, regardons l'organigramme pour une meilleure compréhension.

Organigramme du statut de la commande Woocommerce

Woocommerce Order Status Flow Chart
Source : https://docs.woocommerce.com/document/managing-orders/

Comme illustré, une fois le paiement d'une commande effectué avec succès, son statut est défini sur "Traitement" jusqu'à ce que le propriétaire du magasin le modifie manuellement en "Terminé". Il s'agit d'une tâche générale pour le propriétaire du magasin ou l'administrateur, en particulier dans les cas où le volume des ventes est élevé. Une façon de rendre ce processus efficace consiste à terminer automatiquement les commandes WooCommerce lorsqu'elles passent au statut de traitement. Voyons comment nous pouvons le faire en utilisant un extrait de code.

Liste complète du statut de la commande dans WooCommerce

  • En attente de paiement : cela apparaît par défaut lorsque la commande a été passée mais qu'aucun paiement n'a été effectué.
  • Échec : cela indique que le paiement n'a pas abouti et a été rejeté.
  • Traitement : cela indique que le paiement a été effectué et a été reçu par les propriétaires de magasins et qu'il peut maintenant être traité pour l'expédition et la livraison.
  • Terminé : cela indique que tout s'est bien passé et que la commande a maintenant été exécutée et terminée.
  • En attente : Ceci indique un état où la commande nécessite une confirmation du propriétaire du magasin.
  • Annulée : Une commande dont le statut est "Annulée" ne nécessite aucune autre action. L'annulation peut provenir de l'administrateur ou du client à un moment donné.
  • Remboursé : la commande a été remboursée, aucune autre action n'est requise

Maintenant que nous comprenons mieux ce qu'est le statut de la commande et sa fonction, voyons pourquoi il peut être judicieux de le mettre à jour.

Définissez automatiquement le statut de la commande WooCommerce sur Terminé en fonction du mode de paiement

Dans la plupart des cas, vous n'aurez besoin de le faire qu'après que le paiement a été effectué avec succès, et cela n'est possible que lorsque l'utilisateur n'a pas sélectionné l'option Paiement à la livraison. Le code ci-dessous, lorsqu'il est inséré dans le fichier functions.php de votre thème enfant, définira automatiquement le statut de la commande comme Terminé chaque fois qu'un paiement a été effectué avec succès. Par conséquent, dans tous les cas, sauf lorsque l'utilisateur sélectionne l'option Paiement à la livraison, le statut de la commande passera automatiquement à Terminé.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method');

fonction ts_auto_complete_by_payment_method($order_id)
{
  
  si ( ! $id_commande ) {
        revenir;
  }

  $produit global ;
  $order = wc_get_order( $order_id );
  
  if ($order->data['status'] == 'processing') {
        $payment_method=$order->get_payment_method();
        si ($payment_method!="cod")
        {
            $commande->update_status( 'terminé' );
        }
      
  }
  
}

Ici, vous utiliserez le crochet woocommerce_order_status_changed pour appeler une fonction lorsque le statut d'une commande est modifié. Après avoir vérifié si la commande a le statut Traitement, uniquement si le mode de paiement n'est pas Contre-remboursement, le statut de la commande sera changé en Terminé . WooCommerce a quatre méthodes de paiement par défaut, à savoir. Virement bancaire direct (bacs), Paiements par chèque (chèque), Paiement à la livraison (cod) et PayPal (paypal). Selon le mode de paiement pour lequel vous spécifiez la condition, vous devrez utiliser l' ID approprié, par exemple « bacs », « chèque », « cod », « paypal ».

Définissez automatiquement le statut de la commande WooCommerce sur Terminé pour les produits virtuels

Un autre cas où vous voudriez que le statut de la commande se termine automatiquement est lorsque le ou les produits de la commande sont des produits virtuels. Les produits virtuels sont des produits non tangibles ou téléchargeables. Un exemple de ceci serait un abonnement d'adhésion à un magasin ou un coupon qui offre des réductions à ceux qui ont acheté l'abonnement.

automatically Complete WooCommerce orders when they go to the Processing status - Virtual Product Example - Store Membership
Exemple de produit virtuel

Un abonnement d'adhésion à un magasin peut ne pas avoir de forme tangible, mais plutôt une date d'expiration. Les produits téléchargeables tels que les logiciels ou même les tickets de cinéma électroniques sont également des produits virtuels, car ils n'ont pas de présence ou de forme hors ligne. Avec la plupart des produits virtuels, il n'y a jamais d'option de "paiement à la livraison". Les paiements sont effectués sur place, et il serait donc prudent de ne pas inclure la condition de vérification des méthodes de paiement utilisées, mais d'ajouter uniquement une condition pour vérifier si tous les produits de la commande sont des produits virtuels.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual');

fonction ts_auto_complete_virtual($order_id)
{
  
  si ( ! $id_commande ) {
        revenir;
  }
  
  $produit global ;
  $order = wc_get_order( $order_id );
  
  if ($order->data['status'] == 'processing') {
    
    $commande_virtuelle = null ;

    si ( count( $commande->get_items() ) > 0 ) {

      foreach( $commande->get_items() as $item ) {

        if ( 'line_item' == $item['type'] ) {

          $_product = $order->get_product_from_item( $item );

          if ( ! $_product->is_virtual() ) {
            // une fois que nous avons trouvé un produit non virtuel, sortir de la boucle
            $commande_virtuelle = faux ;
            Pause;
          } 
          autre {
            $commande_virtuelle = vrai ;
          }
       }
     }
   }

    // si tous sont des produits virtuels, marquer comme terminé
    si ( $ commande_virtuelle ) {
      $commande->update_status( 'terminé' );
    }
  }	
}

Ici, nous utilisons le même hook pour appeler notre fonction ts_auto_complete_virtual . Après avoir vérifié si la commande est en état de traitement, vous devez parcourir chaque article de la commande pour voir s'il s'agit d'un produit virtuel.

Conclusion

Une commande Woocommerce typique est associée à de nombreux éléments, tels que des produits, des frais d'expédition, des frais, etc. Ici, line_item fait référence au produit. Seuls les produits doivent être récupérés un par un pour vérifier s'ils sont virtuels. Si même un article n'est pas un produit virtuel, le statut de la commande ne sera pas marqué comme Terminé.

En fonction de vos besoins, cependant, et en utilisant le premier extrait de code de cet article, vous pouvez ajouter d'autres conditions pour marquer le statut de la commande comme Terminé. Par exemple, si vous souhaitez marquer l'état de la commande comme terminé même pour les produits non virtuels (si le paiement de ces produits est effectué), vous pouvez le faire en ajoutant une vérification sur le mode de paiement après avoir vérifié s'il s'agit d'un produit virtuel. produit. Grâce à cet extrait de code, cependant, le statut de la commande sera défini sur Terminé uniquement si tous les produits de la commande sont des produits virtuels.