Un petit bout de code pour limiter les pays d’expédition de WooCommerce lorsque certains produits sont commandés.

Dans notre cas de figure, la boutique permet par défaut de commander des produits dans le monde entier. En revanche, certains produits ne doivent être livrables qu’en France uniquement.

La première étape est de créer une classe d’expédition « France uniquement » et de l’affecter aux produits ou variations de produits de votre choix. Vous pourrez adapter le code source ci-dessous si vos critères de sélection sont différents.

La deuxième étape consiste à placer le code ci-dessous dans le fichier « functions.php » de votre thème enfant.

[pastacode lang=”php” manual=”add_filter(‘woocommerce_countries_allowed_countries’%2C%20’abw_woocommerce_countries_allowed_countries’)%3B%0Afunction%20abw_woocommerce_countries_allowed_countries(%24pays)%20%7B%0A%09if%20(%20(is_cart()%20%7C%7C%20is_checkout())%20%26%26%20WC()-%3Ecart%20)%3A%0A%09%09foreach%20(%20WC()-%3Ecart-%3Eget_cart()%20as%20%24cart_item_key%20%3D%3E%20%24values%20)%20%7B%09%0A%09%09%09if(%24values%5B’data’%5D-%3Eget_shipping_class()%20%3D%3D%20’france-uniquement’)%3A%0A%09%09%09%09unset(%24pays)%3B%0A%09%09%09%09%24pays%20%3D%20%5B’FR’%20%3D%3E%20’France’%5D%3B%0A%09%09%09%09break%3B%0A%09%09%09endif%3B%0A%09%09%7D%0A%09endif%3B%0A%09return%20%24pays%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

Explications :

Le filtre WooCommerce « woocommerce_countries_allowed_countries » est celui qu’il faut utiliser pour modifier la liste des pays d’expédition. Il peut être utilisé pour ajouter, modifier ou supprimer des pays.

Nous commençons par tester si nous sommes soit sur le panier soit dans la commande et si le panier est bien disponible.

Nous parcourons ensuite les produits du panier pour éventuellement trouver un produit dont la classe d’expédition est « france-uniquement » (slug de notre classe « France uniquement »).

Au premier produit correspondant, nous supprimons le tableau des pays, puis le créons de nouveau avec l’unique pays « France ». Un seul produit suffit pour limiter les pays, nous sortons de la boucle des produits du panier.

S’agissant d’un filtre, nous renvoyons finalement le tableau des pays, modifié ou non.