Comment cacher les autres méthodes d’expédition lorsque « Livraison gratuite » est disponible

De base, lorsque vous activez la livraison gratuite pour un montant défini ou toute autre condition, WooCommerce continue d’afficher vos différents modes de livraison. Voyons donc comment n’afficher que l’option de livraison gratuite si elle est active.

C’est une opération qui n’est pas trop compliquée qui ne demande que 2 minutes.

Commencez par vider le cache WooCommerce en allant dans le menu « Woocommerce > Etat > Outils > WooCommerce Trascients » et la cliquez sur le bouton « Effacer les données temporaires ».

Ensuite, ajoutez ce bout de code à votre fichier functions.php

Pour WordPress 3.0 & +

/**
 * Cacher les frais de ports lorsque "livraison gratuite" est actif.
 */
function my_hide_shipping_when_free_is_available( $rates ) {
	$free = array();
	foreach ( $rates as $rate_id => $rate ) {
		if ( 'free_shipping' === $rate->method_id ) {
			$free[ $rate_id ] = $rate;
			break;
		}
	}
	return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

Pour WordPress 2.5

/**
 * Cacher les frais de ports lorsque "livraison gratuite" est actif.
 */
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
 
/**
 * Hide shipping rates when free shipping is available
 *
 * @param array $rates Array of rates found for the package
 * @param array $package The package array/object being shipped
 * @return array of modified rates
 */
function hide_shipping_when_free_is_available( $rates, $package ) {
 	
 	// Only modify rates if free_shipping is present
  	if ( isset( $rates['free_shipping'] ) ) {
  	
  		// To unset a single rate/method, do the following. This example unsets flat_rate shipping
  		unset( $rates['flat_rate'] );
  		
  		// To unset all methods except for free_shipping, do the following
  		$free_shipping          = $rates['free_shipping'];
  		$rates                  = array();
  		$rates['free_shipping'] = $free_shipping;
	}
	
	return $rates;
}

Et voilà, c’était aussi simple. A partir de maintenant, si la condition nécessaire pour obtenir la livraison gratuite, les autres modes de livraisons seront masqués.

Gregory

Agitateur de Stratégies, addict à WordPress depuis 2003, fada de Google depuis 1998. Incubateur Digital, j'accompagne au quotidien plusieurs entreprises et indépendants dans la gestion de leur stratégie digitale et l'optimisation de leurs sites WordPress. Basé à Aix-en-Provence, je suis à l'écoute de votre projet si vous avez besoin d'un expert WordPress.

Vous aimerez aussi

4 Comments

  1. Bonjour,
    Merci pour cette aide précieuse. Cela fait plusieurs heures que j’essaie différentes fonctions sans résultats…J’ai enfin réussi à la faire fonctionner grâce à un élément clé de votre explication : « vider le cache » !!!
    Un grand merci

  2. Merci beaucoup pour ce code! C’est génial!
    Malgré le fait que les frais de livraison sont offerts, j’aurais aimé gardé le point « retrait en magasin ».
    Sauriez vous quoi ajouter dans le code?
    Merci beaucoup
    Belle journée

    1. Bonjour Carole, essayez le code suivant :

      function hide_shipping_when_free_is_available( $rates, $package ) {
      $new_rates = array();
      foreach ( $rates as $rate_id => $rate ) {
      // Only modify rates if free_shipping is present.
      if ( ‘free_shipping’ === $rate->method_id ) {
      $new_rates[ $rate_id ] = $rate;
      break;
      }
      }

      if ( ! empty( $new_rates ) ) {
      //Save local pickup if it’s present.
      foreach ( $rates as $rate_id => $rate ) {
      if (‘local_pickup’ === $rate->method_id ) {
      $new_rates[ $rate_id ] = $rate;
      break;
      }
      }
      return $new_rates;
      }

      return $rates;
      }

      add_filter( ‘woocommerce_package_rates’, ‘hide_shipping_when_free_is_available’, 10, 2 );

      1. Bonjour Grégory,

        Mille mercis pour cette réponse ultra rapide et qui fonctionne parfaitement pour ma boutique!

        Merci encore!
        Belle journée

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *