FOX - WooCommerce Currency Switcher Professional

Changer automatiquement la devise selon le pays dans WooCommerce (GeoIP)

Pour changer automatiquement la devise selon le pays dans WooCommerce, FOX utilise des règles GeoIP : vous attribuez des pays à chaque devise, et un visiteur venu d'Allemagne ouvre la boutique en euros tandis qu'un visiteur canadien voit des dollars canadiens, sans toucher à un sélecteur. La configuration prend quelques minutes. Ce qui surprend le plus les propriétaires de boutiques ensuite, c'est un choix de conception : les règles choisissent la devise uniquement lors de la première visite. Voici comment fonctionne toute la chaîne, comment la configurer, comment la tester correctement et comment modifier le comportement par défaut lorsque c'est nécessaire.

Comment fonctionne le changement automatique de devise par pays

Trois étapes s'exécutent lors de la première page vue du visiteur :

  1. WooCommerce trouve le pays. FOX n'a pas de base d'adresses IP propre. Il appelle WC_Geolocation::geolocate_ip(), la fonction que WooCommerce utilise pour les taxes et la livraison. WooCommerce lit d'abord un en-tête de pays si le serveur ou le CDN en envoie un (par exemple CF-IPCountry chez Cloudflare), puis recherche l'adresse IP dans la base MaxMind GeoLite2 et, en dernier recours, interroge un service de recherche public.
  2. FOX fait correspondre le pays. Il parcourt les listes de pays de son onglet GeoIP. La première devise dont la liste contient le code pays à deux lettres devient la devise du visiteur.
  3. FOX enregistre le résultat pour ce visiteur, et chaque page suivante utilise la devise enregistrée.

Avant la correspondance, un tout nouveau visiteur reçoit la Devise d'accueil (Welcome currency) de l'onglet Options. Si le pays détecté figure dans l'une de vos listes, la devise GeoIP la remplace dès cette même page vue. Sinon, ou si aucun pays n'a été détecté, le visiteur reste sur la devise d'accueil. La langue du navigateur ne joue aucun rôle.

Configurer le changement automatique de devise par pays

Tous les réglages de FOX se trouvent dans WooCommerce → Réglages → Devise (Currency).

  1. Ajoutez chaque devise que vous voulez afficher dans l'onglet Devises (Currencies). FOX ne traduit pas de lui-même un pays en sa devise locale : un visiteur ne peut recevoir qu'une devise présente dans votre liste et à laquelle son pays est attribué. Une boutique avec EUR, GBP et USD peut servir le monde entier, mais un visiteur japonais ne voit des yens que si vous ajoutez JPY.
  2. Donnez une source de pays à WooCommerce. Créez un compte MaxMind gratuit, générez une clé et enregistrez-la dans WooCommerce → Réglages → Intégration → Géolocalisation MaxMind (MaxMind Geolocation) ; WooCommerce télécharge la base de données lorsque la clé est enregistrée. Le guide MaxMind de WooCommerce montre les étapes. Réglez Emplacement par défaut du client (Default customer location) dans WooCommerce → Réglages → Général sur une option Géolocaliser (Geolocate), afin que WooCommerce lui-même travaille avec le même pays pour les taxes, la livraison et l'adresse de paiement préremplie.
  3. Attribuez les pays dans l'onglet GeoIP de FOX. Chaque devise dispose d'une liste à sélection multiple avec les boutons Tout sélectionner (Select all) et Tout effacer (Clear all). L'onglet apparaît lorsque WooCommerce est actif, car les règles dépendent de sa classe de géolocalisation.
  4. Choisissez la devise d'accueil dans l'onglet Options. C'est ce que reçoivent les visiteurs de tous les pays non listés : elle joue donc le rôle de « tous les autres ». Utilisez une devise visible dans le sélecteur ; la description de l'option elle-même met en garde contre une devise masquée.
  5. Cliquez sur Enregistrer les modifications (Save changes).

Une configuration type pour une boutique établie dans la zone euro :

DevisePays de sa liste GeoIPQui la reçoit lors de la première visite
EURles pays de la zone euroles visiteurs de ces pays
GBPRoyaume-Uniles visiteurs britanniques
CHFSuisse, Liechtensteinles visiteurs suisses et liechtensteinois
USD (devise d'accueil)videtous les autres, et les visiteurs dont le pays n'a pas pu être détecté

Trois règles tranchent les cas limites. Un pays listé sous deux devises va à la première dans l'ordre de l'onglet Devises (Currencies). Un pays qui ne figure dans aucune liste reçoit la devise d'accueil. Ajouter un marché à vos zones de livraison ne l'ajoute pas aux règles GeoIP ; ajoutez-le aussi ici.

Profils de pays

Sous les règles, les Profils GeoIP (GeoIP profiles) permettent d'enregistrer un ensemble de pays nommé et de l'appliquer avec Ajouter à : (Add to:) et une devise. Appliquer un profil remplace la liste de cette devise par les pays du profil ; il ne s'y ajoute pas. FOX est livré avec un profil Pays de l'UE (EU countries), qui liste les États membres de l'UE, et non la zone euro : il inclut donc des pays ayant leur propre devise, comme la Suède, la Tchéquie, le Danemark, la Hongrie et la Roumanie. Après l'avoir appliqué à EUR, retirez les pays que vous voulez servir dans une autre devise et vérifiez la liste avant d'enregistrer.

Pourquoi la devise ne change que lors de la première visite

Les règles GeoIP décident de ce que voit un visiteur en premier, pas de ce à quoi il est cantonné. Une fois que FOX a enregistré une devise pour un visiteur, il l'utilise sur chaque page : un visiteur qui préfère les dollars peut donc changer et garder les dollars. Le même mécanisme explique les signalements selon lesquels « GeoIP ne fonctionne plus » : votre propre navigateur a déjà une devise enregistrée, et modifier les règles ne touche pas les visiteurs qui en ont déjà une.

Ce qui compte comme un nouveau visiteur dépend de Stockage de la devise (Currency storage) dans l'onglet Options :

Stockage de la deviseLe visiteur est identifié parUne nouvelle visite est
Session PHP (PHP Session)le cookie de session PHP du navigateurun nouveau navigateur ou appareil, ou une nouvelle session
Session FOX (FOX Session)un cookie wp_woocs_session_ valable 48 heuresun nouveau navigateur ou appareil, ou le cookie a expiré
Transient, Memcached, Redisl'adresse IPun nouveau réseau ; tous les appareils d'un même Wi-Fi comptent comme un seul visiteur

Ainsi, un client qui voyage reçoit de nouveau la devise du nouveau pays avec un stockage basé sur l'IP, mais garde son ancienne devise avec un stockage par session. Changer le type de stockage supprime aussi toutes les devises enregistrées, ce qui explique que GeoIP semble parfois « se mettre à fonctionner » juste après ce changement : chaque visiteur est nouveau une fois.

Tester comme un nouveau visiteur

Tester dans le navigateur qui vous a servi à configurer la boutique montre votre devise enregistrée, pas le résultat GeoIP. Procédez plutôt ainsi :

  1. Placez [woocs_geo_hello] [woocs_show_current_currency] sur une page en brouillon et excluez cette page de tout cache. [woocs_geo_hello] affiche le pays que WooCommerce détecte pour vous, [woocs_show_current_currency] la devise que FOX utilise pour vous.
  2. Avec Session PHP (PHP Session) ou Session FOX (FOX Session), ouvrez la page dans une fenêtre privée qui n'a pas encore visité le site.
  3. Avec Transient, Memcached ou Redis, une fenêtre privée ne suffit pas, car l'adresse IP est la même. Utilisez une autre connexion, par exemple un téléphone en données mobiles, ou un VPN activé avant l'ouverture du site et dont personne n'a utilisé l'adresse pour un test.

Les adresses de VPN ne sont pas toujours situées là où le fournisseur le prétend ; fiez-vous donc au pays affiché par [woocs_geo_hello]. Si ce pays est absent ou erroné, ou si le pays est correct mais pas la devise, suivez la liste de dépannage de la géolocalisation WooCommerce affiche une mauvaise devise. Si les pages de la boutique sont mises en cache, lisez pourquoi un sélecteur de devises et un cache de pages se battent avant la mise en ligne : une page en cache a été construite pour un autre visiteur, et la décision GeoIP s'exécute en PHP.

Désactiver le changement automatique, ou le rendre permanent

Aucun changement automatique

Il n'existe pas d'interrupteur distinct : GeoIP est actif dès qu'une devise a des pays attribués. Cliquez sur Tout effacer (Clear all) pour chaque devise dans l'onglet GeoIP et enregistrez. Chaque nouveau visiteur démarre alors avec la devise d'accueil et ne la change qu'avec un sélecteur.

La devise du pays sur chaque page

Certaines boutiques ne doivent pas laisser les visiteurs d'un pays listé naviguer dans une autre devise. L'extrait ci-dessous réapplique la devise GeoIP à chaque page vue, une fois que FOX a détecté le pays :

/*
 * FOX: always show the currency assigned to the visitor's country
 * in the GeoIP tab. Visitors from unlisted countries can still switch.
 * Child theme functions.php or a code snippets plugin.
 */
add_action('wp_head', function () {
    global $WOOCS;
    if (empty($WOOCS)) {
        return;
    }
    // Two-letter country code stored by FOX, for example "DE"
    $country  = $WOOCS->storage->get_val('woocs_user_country');
    $currency = $WOOCS->get_currency_by_country($country);
    if ($currency && $currency !== $WOOCS->current_currency) {
        $WOOCS->set_currency($currency);
    }
}, 1000);

La priorité 1000 l'exécute après le code wp_head propre à FOX, qui enregistre le pays. L'extrait lit vos listes GeoIP via $WOOCS->get_currency_by_country(), de sorte que les règles restent en un seul endroit. Si vous écrivez votre propre logique de pays, comparez de vrais codes pays : WooCommerce renvoie FR, ES ou IT, jamais EU, si bien qu'une condition comme 'EU' == $country ne correspond jamais. Si Plusieurs devises autorisées (Is multiple allowed) de l'onglet Avancé (Advanced) est sur Non (No), le paiement est facturé dans la devise de base ; commencez alors la fonction par if (is_checkout()) { return; } pour que la page de paiement ne mélange pas les deux. Comme toute décision prise en PHP, l'extrait ne s'exécute pas pour une page servie depuis un cache de page complet.

Aucun sélecteur

La détection automatique n'a pas besoin d'un sélecteur visible. Ne placez pas le shortcode [woocs] ni le widget, et laissez le sélecteur latéral désactivé dans l'onglet Latéral (Side) ; les visiteurs reçoivent simplement la devise de leur pays. Si vous affichez tout de même un sélecteur, le sélecteur de devises latéral flottant ne demande aucune modification du thème.

Prix, paiement et pays de facturation

Les règles GeoIP choisissent la devise ; le prix est le prix de base converti à votre taux de change. Pour fixer votre propre prix pour un marché, par exemple 45 euros au lieu de 45,37 convertis, voir prix WooCommerce selon le pays. Que le client paie ensuite dans la devise GeoIP ou dans votre devise de base est une décision distincte, expliquée dans afficher les prix en devise locale, facturer en devise de base.

L'adresse IP indique d'où vient la connexion, pas où habite le client. Lorsque la devise de paiement doit correspondre à l'adresse que le client saisit au paiement, utilisez la devise de paiement selon le pays du client en plus des règles GeoIP, ou à leur place.

Liste de contrôle

  • Chaque devise que vous voulez afficher existe dans l'onglet Devises (Currencies).
  • WooCommerce peut localiser les visiteurs : clé MaxMind enregistrée, ou en-tête de pays envoyé par votre CDN.
  • Chaque pays cible figure dans une seule liste GeoIP ; la devise d'accueil couvre tous les autres.
  • Testé comme un nouveau visiteur selon votre type de stockage, sur une page non mise en cache avec [woocs_geo_hello].
  • Cache de pages configuré pour les devises si les pages de la boutique sont mises en cache.

Si un tout nouveau visiteur d'un pays listé obtient toujours la mauvaise devise alors que les caches sont désactivés, ouvrez un sujet sur le forum de support de FOX avec un lien vers votre page de test, vos règles GeoIP et votre réglage de stockage, et nous l'examinerons.