WPCS - WordPress Currency Switcher Professional

Définir la devise selon le pays du visiteur sur WordPress avec GeoIP

Pour définir la devise selon le pays du visiteur sur WordPress, WPCS – WordPress Currency Switcher utilise des règles GeoIP : vous associez des pays à chaque devise, et un nouveau visiteur voit les prix dans la devise de son pays sans toucher au sélecteur. La configuration prend quelques minutes. Ce qui surprend le plus les propriétaires de sites, c'est le moment où les règles s'appliquent : lors de la première visite uniquement, et jamais contre une devise que le visiteur a choisie lui-même. Vous trouverez ci-dessous la configuration, la devise de bienvenue, les deux bibliothèques de géolocalisation, la manière de désactiver la fonction ou de l'étendre, et ce que voient les moteurs de recherche.

Comment la devise est choisie selon le pays

Lors de la première page vue par un visiteur, le plugin effectue quatre opérations :

  1. Il définit la Devise de bienvenue (Welcome currency) comme devise du visiteur.
  2. Il détermine le pays du visiteur à partir de son adresse IP, avec la bibliothèque sélectionnée dans Géolocalisation (Geo position).
  3. Il parcourt vos devises dans l'ordre et retient la première dont la règle GeoIP contient ce pays.
  4. Il enregistre le résultat dans le Stockage de la devise (Currency storage) du visiteur.

À chaque page vue suivante, le plugin utilise la devise enregistrée et ne consulte plus les règles. Une devise choisie par le visiteur dans le sélecteur remplace celle qui est enregistrée et reste en place. Lors de cette toute première page, une règle correspondante l'emporte aussi sur une devise présente dans le lien : un visiteur du Royaume-Uni qui arrive par ?currency=EUR obtient donc quand même la devise de la règle du Royaume-Uni.

« Première visite » signifie que le stockage ne contient encore aucun enregistrement pour ce visiteur. Avec le stockage par défaut transient, l'enregistrement est lié à l'adresse IP et expire un jour après la dernière page vue ; avec cookie, il dure un jour à partir de la première visite ; avec session, il prend fin avec la session PHP. Lorsque l'enregistrement expire, la page vue suivante est de nouveau une première visite et les règles s'exécutent une fois de plus.

GeoIP ne fait que choisir la devise. Les prix doivent toujours être affichés avec [wpcs_price] pour être convertis ; si ce n'est pas encore en place, commencez par comment afficher les prix en plusieurs devises sur WordPress.

Configurer les règles GeoIP

  1. Ouvrez Réglages → Currency Switcher (Settings → Currency Switcher). Dans l'onglet Devises (Currencies), ajoutez toutes les devises que vous voulez afficher et vérifiez que chacune a un taux (voir comment ajouter une nouvelle devise).
  2. Ouvrez l'onglet Règles GeoIP (GeoIP rules). Chaque devise a son propre champ, Choose a country.... Cliquez dessus, saisissez le nom d'un pays et sélectionnez-le. Ajoutez autant de pays que nécessaire.
  3. Cliquez sur Enregistrer les options (Save options).

Trois règles simples à retenir :

  • Des pays uniquement. Il n'existe pas d'entrées pour les régions ou les continents. Pour afficher l'euro à toute la zone euro, ajoutez chaque pays de la zone euro à la règle EUR ; pour afficher le dollar dans toutes les Amériques, ajoutez chaque pays des Amériques à la règle USD.
  • Une seule règle par pays. Si un pays figure dans deux règles, la devise placée plus haut dans la liste l'emporte.
  • Laissez le reste vide. Les pays qui ne figurent dans aucune règle reçoivent la devise de bienvenue : inutile donc de lister le monde entier.

Un exemple pour un site dont la devise de base est USD :

DevisePays de sa règle
EURAllemagne, France, Italie, Espagne, Pays-Bas et les autres pays de la zone euro
GBPRoyaume-Uni
CADCanada
USDAucun : tous les autres pays reçoivent la devise de bienvenue, USD

Le bas de l'onglet Règles GeoIP (GeoIP rules) affiche le pays détecté pour votre propre connexion, ce qui permet de vérifier rapidement que la détection fonctionne sur votre serveur.

Devise de bienvenue, devise de base et une seule devise pour tous

Ces deux réglages se confondent facilement :

  • La devise de base est celle dont le bouton radio est sélectionné dans l'onglet Devises (Currencies). Son taux est 1, et chaque montant de [wpcs_price] est écrit dans cette devise. Elle ne détermine pas ce que voient les visiteurs.
  • La devise de bienvenue, définie dans Devise de bienvenue (Welcome currency) de l'onglet Options, est celle que voit un nouveau visiteur lorsqu'aucune règle GeoIP ne correspond à son pays. Vérifiez-la après avoir ajouté des devises, car ce peut être n'importe quelle devise de la liste, et pas seulement la devise de base.

Un site peut donc conserver ses prix en INR et accueillir quand même ses visiteurs en USD. Pour afficher GBP au Royaume-Uni et USD à tous les autres, réglez Devise de bienvenue (Welcome currency) sur USD et ajoutez le Royaume-Uni à la règle GBP ; rien d'autre n'est nécessaire. Pour afficher une seule devise à tout le monde, videz toutes les règles GeoIP et définissez cette devise comme devise de bienvenue ; si les visiteurs ne doivent pas pouvoir en changer, ne placez aucun sélecteur sur le site.

Une modification de la devise de bienvenue ou des règles concerne les nouveaux visiteurs. Les visiteurs que le plugin mémorise déjà conservent leur devise enregistrée jusqu'à l'expiration de leur enregistrement.

Choisir la bibliothèque de géolocalisation

L'option Géolocalisation (Geo position) de l'onglet Options détermine la manière dont le pays est trouvé :

  • Open Geo IP (par défaut) utilise le fichier de base de données des pays fourni avec le plugin. Il n'y a rien à configurer, mais le fichier n'est à jour que dans la mesure de la version du plugin, et il ne gère que les adresses IPv4. Si le site se trouve derrière Cloudflare avec la géolocalisation IP activée, il prend à la place le pays dans l'en-tête CF-IPCountry de Cloudflare.
  • GeoIP2 (MaxMind API key is required) utilise la base GeoLite2 de MaxMind, plus à jour et compatible avec IPv6. Créez un compte GeoLite2 gratuit chez MaxMind et générez une clé de licence. Sélectionnez GeoIP2, collez la clé dans Clé de licence MaxMind (MaxMind license key), cliquez sur Enregistrer les options (Save options), puis sur Mettre à jour / télécharger la base (Update/Download DB). Le fichier est enregistré sous wp-content/uploads/currency-switcher/GeoLite2-Country.mmdb. Il n'est pas actualisé automatiquement : cliquez de nouveau sur le bouton tous les quelques mois. Tant que le fichier n'existe pas, aucun pays n'est détecté et chaque visiteur reçoit la devise de bienvenue.

Si le pays détecté est incorrect, vide ou identique pour tout le monde, la cause est le plus souvent l'adresse IP que votre serveur transmet à PHP. Ce point est traité dans la détection de la devise par GeoIP ne fonctionne pas.

Désactiver GeoIP ou modifier son comportement

Le désactiver

Retirez tous les pays de chaque règle dans l'onglet Règles GeoIP (GeoIP rules) et cliquez sur Enregistrer les options (Save options). Chaque nouveau visiteur démarre alors avec la devise de bienvenue.

Conserver les règles, arrêter le changement automatique

Le filtre wpcs_geo_position reçoit le code du pays détecté avant la vérification des règles. Renvoyez une valeur vide et aucune règle ne correspond jamais, tandis que les règles restent enregistrées dans les réglages. Ne modifiez pas les fichiers du plugin pour cela : les changements seraient perdus à la prochaine mise à jour.

/*
 * WPCS: keep the GeoIP rules saved but never switch the currency by country.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('wpcs_geo_position', '__return_empty_string');

Le même filtre peut fournir le pays à partir d'une autre source, par exemple l'en-tête de Cloudflare lorsque vous utilisez GeoIP2 ; l'article de dépannage cité plus haut contient cet extrait de code.

Appliquer les règles à chaque nouvelle session du navigateur

Parfois, le pays doit l'emporter à chaque nouvelle visite, et pas seulement à la première, tandis qu'une devise choisie dans le sélecteur reste valable pendant la visite. Cela demande quelques lignes de code. L'extrait ci-dessous traite chaque session du navigateur comme une première visite : il réapplique les règles, ou la devise de bienvenue pour les pays sans règle, à la première page vue après l'ouverture du navigateur.

/*
 * WPCS: apply the GeoIP rules at the start of every browser session.
 * A currency picked in the switcher still wins until the browser is closed.
 * Child theme functions.php or a code snippets plugin.
 */
add_action('template_redirect', function () {
    global $WPCS;
    if (empty($WPCS) || isset($_COOKIE['wpcs_geo_session'])) {
        return;
    }
    // A cookie without expiry date lives until the browser is closed.
    setcookie('wpcs_geo_session', '1', 0, COOKIEPATH, COOKIE_DOMAIN);

    if (isset($_GET['currency'])) {
        return; // the visitor arrived with a currency in the link
    }

    $country  = (string) $WPCS->storage->get_val('wpcs_user_country');
    $currency = $WPCS->get_currency_by_country($country);
    if (!$currency) {
        $currency = $WPCS->get_welcome_currency();
    }
    $WPCS->storage->set_val('wpcs_current_currency', $currency);
    $WPCS->current_currency = $currency;
});

L'extrait ne s'exécute que lorsque WordPress construit la page. Les pages servies depuis un cache de pages l'ignorent : utilisez-le donc sur des sites sans cache de pages complet, ou excluez les pages d'entrée du cache.

Ce que voient les moteurs de recherche

Le plugin ne traite pas les robots de façon particulière. Un robot de moteur de recherche est un visiteur comme un autre : à sa première requête, il reçoit la devise de la règle GeoIP de son pays, ou la devise de bienvenue. Google explore surtout à partir d'adresses situées aux États-Unis ; si les États-Unis figurent dans une règle, vos pages sont donc indexées avec cette devise, sinon avec la devise de bienvenue. Les robots situés dans d'autres pays passent par les mêmes règles. Toutes les devises sont affichées sous la même URL, chaque page est donc indexée dans une seule devise. Pour contrôler laquelle, choisissez la devise de bienvenue, ainsi que la devise de la règle des États-Unis, en pensant aux résultats de recherche.

Vérifier que cela fonctionne

Créez une page en brouillon avec trois shortcodes :

[wpcs_check_country]
[wpcs_price value=100]
[wpcs]

[wpcs_check_country] affiche le pays que la bibliothèque détecte pour le visiteur courant, avant le filtre wpcs_geo_position, et le prix indique quelle devise est active. Chaque test doit être une véritable première visite : une nouvelle fenêtre de navigation privée avec le stockage cookie ou session, une autre connexion avec le stockage transient. Une copie de développement sur votre propre ordinateur, où PHP voit l'adresse de bouclage, signale toujours une adresse de test située aux États-Unis. Si le site utilise un cache de pages, réglez J'utilise un plugin de cache sur mon site (I am using cache plugin on my site) sur Oui (Yes) dans l'onglet Options et videz le cache, sinon la page d'un visiteur est servie à tout le monde.

  • Les règles contiennent des pays, pas des régions, et chaque pays figure dans une seule règle.
  • La devise de bienvenue est la devise de tous les pays sans règle.
  • Avec GeoIP2, la clé est enregistrée et le fichier de base de données a été téléchargé.
  • Le test était une première visite pour le Stockage de la devise (Currency storage) sélectionné.

Si la page de test affiche le bon pays et que la devise ne suit toujours pas les règles, ouvrez un sujet sur le forum de support WPCS avec un lien vers la page de test et vos réglages Géolocalisation (Geo position) et Stockage de la devise (Currency storage).