WPCS - WordPress Currency Switcher Professional

Sélecteur de devises WordPress qui ne convertit pas les prix : solutions

Le sélecteur est sur la page, un visiteur choisit les euros, et les prix restent en dollars. Ou bien ils passent à 0.00, disparaissent, ou le shortcode lui-même s'affiche comme du texte. Lorsqu'un sélecteur de devises WordPress ne convertit pas les prix, la cause se trouve presque toujours dans une courte liste, et une page de test de deux lignes vous indique quel point vérifier. Ce guide concerne WPCS – WordPress Currency Switcher, le plugin dédié aux prix dans les articles, les pages et les contenus personnalisés.

Commencez par une page de test de deux lignes

Créez une page en brouillon qui ne contient que ces deux shortcodes :

[wpcs]
[wpcs_price value=100]

Ouvrez l'aperçu dans une fenêtre de navigation privée, où vous n'êtes pas connecté, et choisissez chaque devise dans le sélecteur. Le résultat sépare le problème en deux : la configuration du plugin, ou l'endroit où vos vrais prix sont affichés.

Ce que vous voyez sur la page de testOù chercher
100 est converti correctement dans toutes les devisesLe plugin fonctionne. Vos vrais prix ne sont pas affichés par le shortcode, ou sont mal écrits : voir les deux sections suivantes
0.00 dans une ou plusieurs devisesLe taux de change de cette devise est 0 ou vide
La page se recharge mais le montant reste le mêmeCache de page ou stockage de la devise
Choisir une devise ne fait rienUn problème JavaScript sur la page
[wpcs_price value=100] s'affiche comme du texteWPCS n'est pas actif sur ce site
Le test fonctionne, mais les prix des produits WooCommerce ne changent jamaisCe n'est pas le bon plugin pour une boutique

Le prix n'est pas affiché par [wpcs_price]

C'est la cause la plus fréquente. WPCS ne cherche pas les montants dans vos pages. Il ne convertit que ce que son shortcode [wpcs_price] (ou son API PHP) affiche. Un prix saisi comme texte brut, tel que « Nos tarifs débutent à 20 $ », un champ de prix du thème, un widget de tableau tarifaire ou une cellule d'un plugin de tableaux reste exactement tel qu'il est écrit, quelle que soit la devise sélectionnée. Remplacez chacun de ces montants par le shortcode, rédigé dans votre devise de base :

Our rates start at [wpcs_price value=20] per hour.

Si le thème affiche le prix depuis son propre champ dans un modèle, modifiez le modèle dans un thème enfant avec echo do_shortcode('[wpcs_price meta_value="price"]');, où price est le nom du champ personnalisé. La référence de [wpcs_price] liste tous les attributs.

Le champ n'exécute pas les shortcodes

Si le shortcode fonctionne sur la page de test mais apparaît comme du texte dans votre mise en page, le champ où il se trouve affiche son contenu en texte brut. Exemples typiques : les widgets de titre et de bouton, les widgets de tableau tarifaire, les cellules de plugins de tableaux, les champs d'options du thème et les balises dynamiques qui affichent un champ personnalisé. Déplacez le prix dans un élément de texte ou de shortcode, ou affichez-le depuis un modèle. Si un élément tiers doit contenir le prix, son auteur doit faire passer ce champ par do_shortcode() de WordPress ; demandez-le-lui.

Un shortcode dans un autre shortcode

[wpcs_price value="[acf field=price]"] ne fonctionne jamais : WordPress n'exécute pas les shortcodes à l'intérieur des attributs d'un shortcode, de sorte que value reçoit le texte littéral. Laissez WPCS lire le champ lui-même avec [wpcs_price meta_value=price] ; les champs ACF simples sont stockés sous leur nom de champ. Pour les lignes d'un répéteur ACF, affichez le prix dans le modèle :

<?php
// Child theme template: ACF repeater "plans" with the sub field "price".
if (have_rows('plans')) {
    while (have_rows('plans')) {
        the_row();
        echo do_shortcode('[wpcs_price value="' . floatval(get_sub_field('price')) . '"]');
    }
}

Le prix est devenu un lien

WPCS affiche le prix sous la forme d'un simple <span class="wpcs_price">, sans aucun lien. Si le prix est souligné ou cliquable, l'éditeur de pages a enveloppé le shortcode dans un lien lors de son insertion ; Thrive Architect le fait, par exemple. Supprimez l'élément et insérez à nouveau le shortcode en texte brut, puis vérifiez le HTML de l'élément.

Le shortcode est mal écrit

Un shortcode comportant une petite faute de frappe n'affiche rien, affiche 0.00, ou s'affiche comme du texte. Vérifiez ces points :

  • Les espaces. Une espace après le nom du shortcode et entre les attributs : [wpcs_price type="fixed" value="USD:20,ZAR:350"]. Sans la première espace, [wpcs_pricetype="fixed" ...] est un autre shortcode, inconnu.
  • Les guillemets droits. Un texte copié depuis un traitement de texte, un document ou une messagerie contient souvent des guillemets typographiques (” “). WordPress les considère comme faisant partie de la valeur : type n'est alors plus fixed et value n'est plus un nombre, ce qui donne 0.00. Ressaisissez les guillemets dans la vue code ou texte de l'éditeur, ou omettez-les pour les valeurs simples : value=100.
  • Un nombre simple. value est un montant dans la devise de base, avec un point pour les décimales : 1500 ou 1500.50. PHP lit le nombre jusqu'au premier caractère qu'il ne comprend pas : 1,500 est donc lu comme 1, 1.500,00 comme 1.5 et $1500 comme 0.
  • Une valeur vide. value=0, un value vide ou un champ personnalisé vide n'affiche rien du tout. Avec meta_value, vérifiez la clé méta exacte, et ajoutez post_id=123 lorsque le champ appartient à un autre contenu.
  • Les prix fixes. Avec type="fixed", listez chaque devise du site sous forme de paires CODE:montant séparées par des virgules. Une devise absente de la liste affiche none.

Le taux de change est 0 ou vide

Un prix converti est le montant de base multiplié par le taux de la devise sélectionnée : un taux de 0 affiche donc tous les prix à 0.00. Une nouvelle ligne de devise démarre avec un taux de 0 tant que vous n'avez pas récupéré ou saisi un taux. Lorsque la récupération échoue, par exemple parce que le code n'est pas un code ISO 4217 valide ou parce que l'agrégateur exige une clé API que vous n'avez pas saisie, le champ de taux reçoit un texte d'erreur tel que There is no data for these currencies au lieu d'un nombre, et l'enregistrement de la page stocke ce taux comme 0.

  1. Ouvrez Réglages (Settings) → Currency Switcher, onglet Devises (Currencies), et regardez le taux de chaque devise. La devise de base (le bouton radio sélectionné) a le taux 1.
  2. Cliquez sur Mettre à jour tous les taux (Update all rates), ou sur le bouton de mise à jour à côté d'un taux, ou saisissez le taux à la main. Si le champ affiche un message au lieu d'un nombre, vérifiez le code ainsi que l'Agrégateur de devises (Currency aggregator) et la Clé API de l'agrégateur (Aggregator API key) dans l'onglet Options ; chaque message est expliqué dans l'erreur « no data for » du sélecteur de devises, et les problèmes de code dans pourquoi la mise à jour automatique des taux ne fonctionne pas.
  3. Cliquez sur Enregistrer les options (Save options) et videz le cache de page.

Si les prix affichent 0.00 un instant puis le bon montant, la page provient d'un cache créé alors qu'un taux valait encore 0, et J'utilise un plugin de cache sur mon site (I am using cache plugin on my site) redessine les prix après le chargement. Corrigez les taux, puis videz tous les caches.

La page ne suit pas le sélecteur : cache, stockage, JavaScript

Lorsqu'un visiteur choisit une devise, la page se recharge avec ?currency=EUR dans l'adresse, le plugin enregistre le choix dans le stockage défini dans Stockage de la devise (Currency storage), et toutes les pages suivantes sont construites avec les prix dans cette devise. Trois éléments rompent cette chaîne.

  • Le cache de page. Une page en cache contient les prix dans la devise avec laquelle elle a été mise en cache : la page suivante affiche donc l'ancienne devise. Dans l'onglet Options, réglez J'utilise un plugin de cache sur mon site (I am using cache plugin on my site) sur Oui (Yes) et videz tous les caches : plugin, serveur et CDN. Le navigateur envoie alors une requête à admin-ajax.php (action wpcs_get_prices_html) après le chargement de la page et redessine chaque [wpcs_price] dans la devise du visiteur. Signe typique de cette cause : tout fonctionne quand vous êtes connecté, car les caches ignorent les administrateurs.
  • Le stockage de la devise. Si la devise revient à la devise de bienvenue ou GeoIP juste après le changement, le stockage choisi ne conserve pas la valeur sur votre serveur. Les sessions sont le plus souvent en cause : réglez Stockage de la devise (Currency storage) sur transient, la valeur par défaut.
  • JavaScript. La liste déroulante est pilotée par JavaScript. Si choisir une devise ne fait rien, ouvrez la console du navigateur (F12) et rechargez : une erreur provenant d'un autre script, ou un plugin d'optimisation qui retarde, diffère ou combine les scripts, bloque le sélecteur. Corrigez l'erreur, ou excluez /wp-content/plugins/currency-switcher/js/ et jQuery de ces fonctions, puis videz les caches.

Les exclusions propres à chaque plugin et les caches serveur que vous ne pouvez pas désactiver sont traités dans le sélecteur de devises ne fonctionne pas avec un plugin de cache.

Les prix des produits WooCommerce ne changent pas : ce n'est pas le bon plugin

WPCS ne modifie jamais les prix des produits WooCommerce, le panier ni la page de paiement. C'est sa conception, non un défaut : il convertit uniquement les prix du contenu. Une boutique a besoin du plugin frère FOX – WooCommerce Currency Switcher. Si vous disposez du téléchargement de FOX, assurez-vous d'avoir installé l'archive du plugin principal et non l'archive bonus de WPCS qui l'accompagne dans un dossier séparé. Les différences sont expliquées dans WordPress Currency Switcher et WooCommerce Currency Switcher.

Liste de contrôle

  • La page de test avec [wpcs] et [wpcs_price value=100] convertit dans une fenêtre privée.
  • Chaque prix qui doit changer est affiché par [wpcs_price], dans un champ qui exécute les shortcodes, et non imbriqué dans un autre shortcode.
  • Espaces entre les attributs, guillemets droits, nombres simples dans la devise de base.
  • Aucune devise n'a un taux de 0 ou un taux vide.
  • Avec un cache de page : J'utilise un plugin de cache sur mon site (I am using cache plugin on my site) est sur Oui (Yes) et tous les caches sont vidés.
  • Aucune erreur JavaScript dans la console.

Si tous les points sont validés et qu'un prix ne se convertit toujours pas, ouvrez un sujet sur le forum d'assistance WPCS avec un lien vers la page et le shortcode exact tel que vous l'avez saisi.