Offrir les frais de port à partir d'un certain poids sur votre boutique Woocommerce

dans Woocommerce-wordpress

Voici la méthode pour offrir les frais de port sur votre boutique woocommerce à partir d'un certain poids.

Dans un premier temps il faut que vous rajoutiez un mode de livraison "Livraison gratuite". Pour cela, rendez-vous dans l'administration de Wordpress, rubrique "WooCommerce > Réglages > Expédition > Votre zone" puis "Ajouter une méthode de livraison > Livraison gratuite".

Il va falloir ensuite récupérer l'identifiant des modes de livraison. Pour cela, rendez-vous sur votre boutique, ajoutez un produit au panier et accédez à la page panier. Sur la page panier, dans le tableau "Total panier", faites un clic droit sur le bouton radio à gauche de l'intitulé de livraison (à droite du label "Expédition"), puis cliquez sur "Inspecter". Vous avez alors l'identifiant de chaque intitulé de livraison dans la valeur "value='...'" de chaque bouton radio. Exemple : flatrate:1 ou freeshipping:2.

Rajoutez ensuite dans votre fichier functions.php (présent dans votre thème) le code suivant en remplaçant les identifiants de livraison par les votres :

// frais de ports gratuits au dela de 4 produits
add_filter('woocommerce_package_rates', 'custom_flat_rate_cost_calculation', 10, 2 );

function custom_flat_rate_cost_calculation($rates, $package){
    $products_weight = 0;
    // Parcours des produits du panier pour récupérer le poids de chaque produit x sa quantité
    foreach(WC()->cart->get_cart() as $cart_item){
        if( $cart_item["variation_id"] > 0) {
            $item_id = $cart_item["variation_id"];
        }
        else {
            $item_id = $cart_item["product_id"];
        }
        // Récupération du poids du produit x sa quantité
        $products_weight += $cart_item["quantity"] * get_post_meta( $item_id , "_weight", true);
    }
    // Si le poids total des produits est supérieur ou égal à 1Kg
    if($products_weight >= 1) {
        //__ On masque les frais de port payants
        unset($rates['flat_rate:1']);
    } else {
        //__ On masque les frais de ports gratuits
        unset($rates['free_shipping:2']);
    }
    return $rates;
}
Posté il y a par keepcodeclear.
Uncaught Exception

Uncaught Exception

Module 'mysqli' already loaded

Origin

on line 0

Trace

#0 [internal function]: System\Error::shutdown()
#1 {main}