Votre page de paiement WooCommerce affiche « Aucune méthode de livraison disponible. Assurez-vous que l’adresse que vous avez entrée est correcte ou contactez-nous si vous avez besoin d’aide. » et le client ne peut pas passer sa commande. WooCommerce affiche ce message dès qu’il se retrouve avec zéro tarif d’expédition, parce que l’adresse échoue à l’un de quatre contrôles : le pays, la zone, le mode ou le tarif. Activez le mode de débogage de l’expédition pour voir à quelle zone l’adresse correspond, puis suivez les quatre contrôles dans l’ordre jusqu’à celui qui échoue. L’adresse saisie par le client est presque toujours bonne, et la correction tient le plus souvent à un seul réglage de la boutique. Sur un site en anglais, le même message commence par « There are no shipping options available ».
Ce que vous allez accomplir
- Savoir lequel des quatre contrôles d’expédition échoue pour une vraie adresse de client.
- Corriger la zone, la liste de codes postaux, le mode, le champ de coût ou l’extension de transporteur en cause.
- Effacer les tarifs périmés gardés dans les sessions des clients pour que la correction s’applique tout de suite.
- Confirmer que les pages Panier et Validation de commande ne sortent pas d’un cache de pages.
- Voir de vrais tarifs à la caisse dans une fenêtre privée, avec le mode de débogage désactivé.
Prérequis
Il vous faut un compte administrateur WordPress. Les libellés ci-dessous correspondent à WooCommerce 11.1 en français canadien. Dans les versions plus anciennes, l’onglet Réglages de livraison s’appelait « Options de livraison » (Shipping options), et le reste est pareil.
Un accès SSH avec WP-CLI, qui permet de lire les réglages de la boutique depuis un terminal, accélère les étapes 4, 5, 7 et 8. Les commandes WooCommerce de WP-CLI doivent agir au nom d’un administrateur, d’où le --user=1 à la fin de chacune. Remplacez 1 par l’identifiant de votre administrateur s’il diffère, et example.com par votre domaine.
Gardez sous la main une adresse qui échoue : pays, province ou État, et code postal.
Comment ça fonctionne
Chaque tarif doit franchir quatre contrôles, dans cet ordre. Un échec à n’importe lequel produit le même message.
1. Le pays. Le pays de livraison doit être permis par Emplacement(s) de livraison, sous WooCommerce → Réglages → Général.
2. La zone. Une zone d’expédition est un groupe de lieux (pays, provinces ou codes postaux) qui partagent les mêmes modes. WooCommerce lit les zones de haut en bas et s’arrête à la première qui correspond. Une adresse qui ne correspond à aucune aboutit dans Emplacements non couverts par vos autres zones, qui n’a aucun mode sur une boutique neuve. Notre article sur les pièges de configuration des zones d’expédition WooCommerce explique en détail l’ordre et la conception des zones.
3. Le mode. La zone trouvée doit avoir au moins un mode, comme Forfait, Livraison gratuite ou une extension de transporteur, avec sa bascule Activé allumée.
4. Le tarif. Chaque mode décide ensuite s’il s’applique à ce panier. La livraison gratuite peut exiger un montant minimum de commande, et le forfait peut avoir un coût vide. Une extension de transporteur peut recevoir une erreur de l’API du transporteur (le service Web qui renvoie les prix en direct).
WooCommerce garde aussi les tarifs calculés dans la session du client et les réutilise tant que le panier, l’adresse ou les réglages d’expédition ne changent pas. Enregistrer une zone ou un mode les remet à zéro. Corriger le poids d’un produit ou les réglages propres à une extension de transporteur ne le fait pas toujours, si bien qu’une correction peut sembler sans effet.
Étape par étape
1. Lisez d’abord le message exact. Sa formulation indique quel panier ou quelle validation de commande le client utilise, et si une adresse a été saisie.
| Ce que voit le client | Où | Ce que ça veut dire |
|---|---|---|
| « Aucune méthode de livraison disponible. Assurez-vous que l’adresse que vous avez entrée est correcte ou contactez-nous si vous avez besoin d’aide. » | Validation de commande classique | Une adresse a été saisie et zéro tarif est revenu |
| « Options de livraison introuvables pour » suivi de l’adresse | Panier classique | Même résultat, dans le calculateur d’expédition du panier |
| « Aucune option d’expédition n’est disponible pour cette adresse. Veuillez vérifier l’exactitude de l’adresse ou saisir une autre adresse. » | Bloc Validation de commande | Même résultat dans la validation en blocs |
| « Entrez votre adresse pour voir les options de livraison. » | Panier ou validation | Pas encore d’adresse; c’est attendu, pas une panne |
2. Activez le mode de débogage de l’expédition. Allez dans WooCommerce → Réglages → Expédition → Réglages de livraison. À côté de Mode débogage, cochez Activer le mode de débogage et enregistrez. Ce mode fait deux choses. Il affiche un avis qui nomme la zone associée à l’adresse, et il recalcule les tarifs à chaque chargement de page au lieu de réutiliser ceux qui sont gardés.
Ajoutez un produit au panier, ouvrez la page Panier et saisissez l’adresse fautive dans le calculateur d’expédition. Rechargez la page Panier si aucun avis n’apparaît. L’avis s’affiche sur la page Panier, pas pendant la validation de commande.
Exemple de sortie (site en anglais) :
Customer matched zone "Locations not covered by your other zones"
Sur un site en français, l’avis se lit « Zone correspondant au client » suivi du nom de la zone entre guillemets. Une zone erronée ou la zone de repli vous envoie à l’étape 4. La bonne zone vous envoie aux étapes 5 à 7. Si les tarifs apparaissent maintenant que le mode est actif, un tarif périmé était en cause; passez à l’étape 8.
Tous les clients voient cet avis, alors désactivez le mode de débogage dès vos tests terminés.
3. Vérifiez que vous livrez dans le pays du client. Ouvrez WooCommerce → Réglages → Général. Regardez Emplacement(s) de vente et Emplacement(s) de livraison. Si Emplacement(s) de livraison vaut Livrer dans des pays spécifiques uniquement, le pays du client doit figurer dans Livrer dans des pays spécifiques.
Un piège : quand Expédier à une adresse différente? n’est pas coché, WooCommerce livre à l’adresse de facturation. Un pays de facturation où vous vendez mais ne livrez pas obtient zéro tarif. C’est pareil quand Destination de la livraison vaut Forcer la livraison à l’adresse de facturation client.
4. Vérifiez à quelle zone l’adresse correspond. Listez vos zones dans l’ordre où WooCommerce les lit.
wp wc shipping_zone list --fields=id,name,order --user=1
Exemple de sortie :
+----+-------------------------------------------+-------+
| id | name | order |
+----+-------------------------------------------+-------+
| 0 | Locations not covered by your other zones | 0 |
| 3 | Montreal island | 0 |
| 1 | Quebec | 1 |
| 2 | Canada | 2 |
+----+-------------------------------------------+-------+
La zone 0 s’affiche toujours en premier, mais WooCommerce la vérifie en dernier. Les autres sont lues selon order, de la plus petite valeur à la plus grande. Listez ensuite les régions de la zone à laquelle l’adresse aurait dû correspondre.
wp wc shipping_zone_location list 3 --fields=code,type --user=1
Exemple de sortie :
+--------+----------+
| code | type |
+--------+----------+
| CA:QC | state |
| H1* | postcode |
| H2* | postcode |
| H3* | postcode |
+--------+----------+
Une zone qui liste à la fois une région et des codes postaux exige que les deux correspondent. Comparez l’adresse fautive à ces règles :
- Format du code postal. WooCommerce met le code postal du client en majuscules et essaie deux formes : compacte (
H2X1Y4) et le format habituel du pays (H2X 1Y4). Une ligne de zone sans*doit être identique à l’une des deux. - Caractères génériques.
H2*couvre tous les codes postaux qui commencent parH2. Les caractères génériques sont comparés à la version formatée. Pour les codes canadiens et britanniques, un motif de plus de trois caractères doit donc contenir l’espace.H2X 1*couvreH2X 1Y4, maisH2X1*ne le couvre pas. - Plages. L’écran de la zone documente les plages comme
90210...99000pour les codes postaux entièrement numériques seulement. Les plages avec des lettres sont converties en chiffres et peuvent rater des adresses près du haut; utilisez des caractères génériques pour les codes canadiens et britanniques. - Province ou État. Une zone limitée à
CA:QCexige que le champ Province soit rempli. Une extension qui masque le champ Province à la caisse empêche cette correspondance.
Corrigez les régions dans WooCommerce → Réglages → Expédition → Zones d’expédition, en modifiant la zone. Pour décider du sort des adresses hors de toutes vos zones, ajoutez un mode à Emplacements non couverts par vos autres zones, ou laissez-la vide volontairement.
5. Vérifiez que la zone trouvée a un mode activé. Utilisez l’identifiant de zone de l’étape 4.
wp wc shipping_zone_method list 3 --fields=instance_id,method_id,title,enabled --format=json --user=1
Exemple de sortie :
[{"instance_id":7,"method_id":"flat_rate","title":"Standard","enabled":false},{"instance_id":9,"method_id":"free_shipping","title":"Free shipping","enabled":true}]
Une liste vide [] signifie que la zone n’a aucun mode. Ici, seule la livraison gratuite est activée, donc tout dépend de ses conditions. Activez un mode avec la bascule Activé sur l’écran de la zone.
6. Vérifiez les conditions de chaque mode. Ouvrez chaque mode activé avec Modifier.
- Livraison gratuite. Lisez La livraison gratuite requiert. Avec Montant minimum de commande, un panier sous ce montant n’obtient rien de ce mode. WooCommerce compare le minimum au panier après les rabais des codes promo, sauf si Appliquer la règle de commande minimale avant la remise avec code promo est coché. Avec Un code promo de livraison gratuite valide, le code promo doit avoir Permettre la livraison gratuite coché dans ses réglages.
- Forfait. Si le champ Coût principal est vide, WooCommerce bâtit le prix uniquement à partir des Coûts par classe de livraison. Quand la classe de livraison du panier a aussi un coût vide, le forfait ne renvoie aucun tarif. Inscrivez
0plutôt que de laisser un champ vide;0est un coût, un champ vide ne l’est pas.
Une zone qui ne contient que la livraison gratuite avec un minimum laisse les petits paniers sans rien. Ajoutez un Forfait payant à cette zone.
7. Vérifiez les extensions de transporteur. Les extensions de tarifs en direct pour Postes Canada, UPS ou FedEx envoient le poids et la taille du panier à l’API du transporteur. Elles exigent un poids sur chaque produit, l’adresse de votre boutique et des identifiants d’API valides.
Trouvez les produits sans poids.
wp wc product list --fields=id,name,weight --per_page=100 --format=csv --user=1 | grep ',$'
Exemple de sortie :
412,"Gift card, printed",
1088,Canvas tote bag,
Chaque ligne est un produit sans poids. Ajoutez --page=2 pour les 100 suivants. Les variations au poids vide prennent celui du produit parent. Confirmez aussi Adresse de la boutique sous WooCommerce → Réglages → Général, puisque les transporteurs calculent à partir de ce code postal d’origine.
Ouvrez ensuite le journal le plus récent qui porte le nom de l’extension du transporteur, sous WooCommerce → État → Journaux. Cherchez les erreurs d’authentification, les délais dépassés ou les messages sur un poids ou des dimensions manquants. Bien des extensions de transporteur n’écrivent un journal qu’après l’activation de leur propre option de débogage ou de journalisation dans les réglages du mode.
8. Effacez les tarifs périmés. Les tarifs gardés dans les sessions sont liés à un numéro de version de l’expédition. WooCommerce le conserve dans un transient, une valeur temporaire que WordPress garde dans la base de données. Remettre ce numéro à jour force des tarifs frais.
wp wc tool run clear_transients --user=1
Exemple de sortie :
Success: Updated system_status_tool clear_transients.
Le même bouton, Effacer les données temporaires, se trouve dans WooCommerce → État → Outils, à la ligne WooCommerce transients. Les clients reçoivent des tarifs frais au prochain chargement. Pour les extensions de transporteur qui gardent leurs propres prix en cache, wp transient delete --all efface tous les transients. Avec Redis ou un autre cache d’objets, lancez aussi wp cache flush.
9. Confirmez que le panier et la validation ne sont pas en cache. Une page Panier en cache montre ce qu’a vu le premier visiteur, y compris une section d’expédition vide. WooCommerce envoie des en-têtes anti-cache sur les pages Panier, Validation de commande et Mon compte. Vérifiez ce que renvoient réellement votre serveur et votre CDN.
curl -s -o /dev/null -D - https://example.com/cart/ | grep -iE '^(cache-control|age|cf-cache-status|x-litespeed-cache|x-cache):'
Exemple de sortie :
cache-control: no-cache, must-revalidate, max-age=0, no-store, private
cf-cache-status: DYNAMIC
C’est sain. Un HIT dans l’un de ces en-têtes, ou un en-tête age:, veut dire qu’un cache sert la page. Remplacez /cart/ par l’adresse de votre page Panier si elle diffère, puis excluez le panier et la validation dans votre extension de cache ou votre règle de CDN. Notre article sur les témoins de contournement de cache pour WooCommerce couvre le côté Cloudflare.
10. Écartez un conflit d’extensions. Si tous les contrôles passent et que les tarifs manquent encore, une autre extension les retire peut-être. C’est souvent une extension d’expédition conditionnelle, un éditeur de champs de caisse ou un sélecteur de devises. Installez l’extension Health Check & Troubleshooting et activez son mode de dépannage (Troubleshooting mode), qui désactive les extensions pour votre session seulement. Réactivez WooCommerce, puis vos extensions d’expédition, puis les autres une à une, et testez l’adresse après chacune.
Valider que ça fonctionne
Décochez Activer le mode de débogage et enregistrez. Ouvrez une fenêtre de navigation privée pour partir sans session. Ajoutez le produit de la commande en échec et saisissez la même adresse à la caisse.
Vous devriez voir au moins un tarif avec un prix, et aucun message d’erreur. Passez une commande de test que vous pourrez rembourser. L’écran de la commande doit afficher le mode d’expédition sous les articles.
Si vous livrez dans une zone limitée, testez aussi une adresse qui devrait échouer. Elle doit toujours afficher le message, ce qui prouve que les zones font ce que vous vouliez.
Dépannage
Les tarifs s’affichent au panier mais disparaissent à la caisse. La caisse utilise l’adresse de livraison, alors que le calculateur du panier utilise ce que vous y avez tapé. Comparez les deux adresses. Vérifiez Expédier à une adresse différente? et toute extension qui modifie les champs Province ou Code postal.
Ça fonctionne connecté, mais pas pour les visiteurs. Les caches de pages sautent habituellement les utilisateurs connectés, alors refaites la vérification curl de l’étape 9.
Seuls certains produits déclenchent le message. Regardez la classe de livraison et le poids du produit dans l’onglet Expédition de Données produit. Une classe au coût de forfait vide, ou un poids manquant avec une extension de transporteur, ne touche que les paniers qui contiennent ce produit.
Ça échoue quelques minutes, puis ça revient. Ce comportement pointe vers l’API du transporteur plutôt que vers vos réglages. Cherchez des délais dépassés dans le journal du transporteur de l’étape 7. Bien des extensions de transporteur offrent un réglage de tarif de secours qui affiche un prix fixe quand l’API ne répond pas.
Quand ce n’est pas la bonne approche
Si l’adresse est hors de toutes les régions que vous desservez, le message fait son travail. Changez la formulation plutôt que les zones; un développeur peut remplacer le texte de la validation classique avec le filtre woocommerce_no_shipping_available_html. Vous pouvez aussi ajouter à Emplacements non couverts par vos autres zones un mode qui invite les clients à vous écrire.
Si vos produits ne s’expédient jamais, comme des services ou des téléchargements, cochez Virtuel sur chacun. Un panier qui ne contient que des produits virtuels saute l’expédition, et aucune zone n’est nécessaire.
Si vos zones se chevauchent beaucoup, corriger une adresse à la fois continuera de créer de nouveaux trous. Repensez-les de la plus précise à la plus générale, avec le guide officiel de WooCommerce sur les zones d’expédition et notre article sur les zones mentionné plus haut.
Un WordPress qui rapporte vraiment mérite un opérateur — Stack Harbor opère cette pile sous WordPress Entreprise ; réservez une consultation d’infrastructure.