• Home
  • Nous contacter

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab
CMS e-Commerce

Woocommerce : Ajouter des coûts administrables pour un produit

Lorsque l’on fait du e-commerce, il arrive que l’on doivent ajouter des coûts supplémentaires à des produits, comme des frais de gestion, un dépôt de garantie, etc. Sous Woocommerce, ajouter des coûts à un panier est assez simple, mais l’ajouter en fonction du produit, et en faisant en sorte que la valeur soit administrable, c’est autre chose. Je vous propose ici un petit tuto sur la façon de procéder.

Les attributs

Woocommerce dispose du système d’attributs, récurrent dans les solutions de e-commerce. C’est par ce système que nous allons passer. Dans un premier temps donc, vous devez créer les attributs que vous allez utiliser pour ajouter des coûts à vos produits.

woocommerce_fees_001

Faites bien attention à l’identifiant que vous allez donner à votre attribut, car c’est de lui dont on va se servir pour ajouter le surcoût.woocommerce_fees_002

Une fois ces éléments créés, vos gestionnaires pourront, dans la fiche produit, sélectionner directement l’attribut et l’ajouter à la fiche.

woocommerce_fees_003

Attention à ne mettre dans ces attributs que des nombres, sans quoi le résultat sera faussé, puisque les valeurs seront converties en float.

woocommerce_fees_004

Pour l’exemple présent, j’ai créé deux attributs : frais d’activation et dépôt de garantie, pour deux comportements différents. Les frais d’activation s’appliqueront à chaque itération du produit dans le panier, tandis que le dépôt de garantie ne s’applique qu’une seule fois, quel que soit le nombre de fois que le produit se trouve dans le panier.

Le code

Pour ajouter les coûts dont nous avons besoin, nous allons utiliser la méthode « get_attribute » (WC_Product) pour récupérer nos attributs, et la méthode « add_fee » (WC_Cart) pour ajouter au panier le coût ainsi récupéré. Ajoutez le code suivant dans votre fichier functions.php de votre thème.

function my_custom_costs(){
    global $woocommerce;

    if(is_admin() && !defined('DOING_AJAX'))
        return;

    //Initialisation des coûts
    $garatie_cost = 0;
    $activation_cost = 0;

    //Parcours du panier
    $cart = $woocommerce->cart->get_cart();
    foreach($cart as $product)
    {
        $the_product = get_product($product['product_id']);

        //Dépôt de garantie, un unique coût pour ce produit
        $garantie_cost += (float) $the_product->get_attribute("pa_depot-de-garantie");

        //Frais d'activation, un coût par produit
        $nb_products = $product['quantity'];
        $activation_cost += ((float) $the_product->get_attribute("pa_frais-activation")) * $nb_products;
    }

    //Application des coûts calculés
    if($garantie_cost)
    {
        $woocommerce->cart->add_fee("Dépôt de garantie", $garantie_cost, true, '');
    }
    if($activation_cost)
    {
        $woocommerce->cart->add_fee("Coût d'activation", $activation_cost*$nb_products, true, '');
    }

}
add_action('woocommerce_cart_calculate_fees','my_custom_costs');

 Que fait cette fonction ?

Pour chaque produit du panier, elle récupère les valeurs des attributs Frais d’activation et Dépôt de garantie. Les identifiants des attributs définis en BO commencent tous par « pa_ » (Product Attribute). Elle ajoute ensuite cette valeur à un total qui sera ensuite ajouté au panier. Pourquoi cette méthode ? Simplement parce qu’il est impossible d’ajouter le coût au cas par cas. L’ajout de coût ne peut se faire que sur le panier global, il faut donc additionner les différents coûts issus des différents produits du panier.

Les Frais d’activation nécessitent d’être itérés autant de fois que le produit auquel ils sont associés. Autrement dit, je dois multiplier le coût additionnel par le nombre de fois que le produit existe dans le panier, ce qui explique le petit multiplicateur.

Il est à noter que les coûts additionnels tels que configurés ici sont soumis à la taxation.

Une fois la boucle terminée, j’ajoute les coûts additionnels finaux au panier.

woocommerce_fees_005

Cette fonction est perfectible

Elle peut servir de base, mais peut totalement être adaptée selon vos besoins. Par exemple, vous pourriez ajouter un système permettant de lister individuellement les coûts qui ont été ajoutés, plutôt que de ne voir qu’un total pour l’ensemble. De même, certains de vos coûts ne seront peut-être pas soumis aux taxes.

Je vous invite donc à consulter directement le code de la fonction add_fee, pour customiser à l’envie cette fonction.

14/05/2014 31 MIN READ BY: Nicolas GUYOT 0 COMMENT
SHARE
LIRE LA SUITE

Nicolas GUYOT

Votre premier module Prestashop

Wordpress, quelques codes utiles - Épisode 1

VOUS POURRIEZ AIMER

CMS Drupal 8 : formulaire d’upload et custom API

Développement e-Commerce Framework Sylius, une vraie alternative à Prestashop ou Magento ?

CMS Changer le wording par défaut sous Drupal 7 – The Right Way

CMS Drupal Fuse, démarrez vos projets Drupal 7 à la vitesse d’une fusée

e-Commerce Module Prestashop | épisode 2

e-Commerce Elasticsearch pour Magento –> Elasticsearch for Magento

A propos d’Adfab

Nous sommes un studio de production digitales et d’innovation digitales au service des agences et des annonceurs
Nous recherchons le scintillement dans les regards et le plaisir de réalisations sur-performantes
Nous sommes techno-agnostiques
Nous sommes Adfab

Le blog d'Adfab
Copyright © 2018 Adfab Connect