WooCommerce permet de définir des frais de livraison fixes ou gratuits, mais il n’offre pas nativement la possibilité d’accorder la livraison gratuite uniquement pour certains produits. Dans ce petit tuto, nous allons voir comment ajouter cette fonctionnalité en modifiant le fichier functions.php de votre thème enfant ou en utilisant un plugin comme Code Snippets.
1. Ajouter une option « Livraison gratuite » dans l’administration WooCommerce
Il faut ajouter une case à cocher dans la fiche produit pour indiquer si un produit bénéficie de la livraison gratuite ou pas.
Ajoutez ce code dans votre fichier functions.php ou via un plugin de snippets :
// Ajouter une option "Livraison Gratuite" dans WooCommerce
add_action('woocommerce_product_options_shipping', 'add_free_shipping_checkbox');
function add_free_shipping_checkbox() {
woocommerce_wp_checkbox(array(
'id' => '_free_shipping',
'label' => 'Livraison gratuite pour ce produit',
'description' => 'Cocher cette case pour offrir la livraison gratuite sur ce produit.',
));
}
// Sauvegarder l'option de livraison gratuite
add_action('woocommerce_admin_process_product_object', 'save_free_shipping_checkbox');
function save_free_shipping_checkbox($product) {
$free_shipping = isset($_POST['_free_shipping']) ? 'yes' : 'no';
$product->update_meta_data('_free_shipping', $free_shipping);
}
- Ce code ajoute une case à cocher dans l’onglet Expédition des fiches produits WooCommerce.
- La valeur est enregistrée dans les métadonnées du produit.
2. Appliquer automatiquement la livraison gratuite aux produits éligibles
Une fois que nous avons défini quels produits doivent bénéficier de la livraison gratuite, nous devons masquer les autres modes de livraison lorsque ces produits sont dans le panier.
Ajoutez ce code dans functions.php :
add_filter('woocommerce_package_rates', 'custom_free_shipping_for_selected_products', 100, 2);
function custom_free_shipping_for_selected_products($rates, $package) {
$free_shipping_available = false;
foreach ($package['contents'] as $item) {
$product_id = $item['product_id'];
$free_shipping = get_post_meta($product_id, '_free_shipping', true);
if ($free_shipping === 'yes') {
$free_shipping_available = true;
break;
}
}
if ($free_shipping_available) {
// Supprimer toutes les autres méthodes sauf la livraison gratuite
foreach ($rates as $rate_id => $rate) {
if ('free_shipping' !== $rate->method_id) {
unset($rates[$rate_id]);
}
}
}
return $rates;
}
- Le code vérifie si au moins un produit éligible à la livraison gratuite est dans le panier.
- Si oui, toutes les autres méthodes de livraison sont masquées sauf la livraison gratuite.
Test et vérification
- Allez dans WooCommerce > Produits et éditez un produit.
- Dans l’onglet Expédition, cochez la case « Livraison gratuite pour ce produit » et enregistrez.
- Ajoutez ce produit au panier et vérifiez que WooCommerce n’affiche plus les autres frais de livraison.
- Ajoutez un produit non éligible et vérifiez que les frais de livraison normaux s’affichent.
Avec ce code, WooCommerce applique automatiquement la livraison gratuite uniquement pour les produits sélectionnés. Cela permet de personnaliser votre stratégie de livraison et d’offrir des avantages exclusifs sur certains produit et sans plugin !







