WPCS - WordPress Currency Switcher Professional

Ajouter une majoration au taux de change dans WordPress ou fixer un taux manuel

Les prix convertis sur un site WordPress peuvent différer de ceux de Google ou de XE de quelques pour cent, et beaucoup de propriétaires de sites veulent cet écart volontairement : ils ajoutent une majoration au taux de change pour couvrir les frais de conversion, ou conservent un taux fixe, comme 1 EUR = 1 CHF, que les mises à jour automatiques ne doivent pas écraser. Dans WPCS – WordPress Currency Switcher, ces trois cas se ramènent à la même question : d'où vient le taux et quand change-t-il. Cet article l'explique, puis montre comment ajouter une marge par devise sans code, une majoration en pourcentage par le code, et des taux manuels fixes.

Pourquoi les prix convertis diffèrent de Google ou de XE

WPCS ne calcule pas les taux de change. Pour chaque devise, il demande le taux par rapport à votre devise de base au service choisi dans Agrégateur de devises (Currency aggregator) (onglet Options de Réglages (Settings) → Currency Switcher), enregistre ce nombre dans la ligne de la devise et multiplie vos prix par ce taux : [wpcs_price value=100] affiche 100 × le taux. Un écart avec Google ou XE a l'une de ces causes :

  • Une autre source. Google et XE affichent les taux du marché en direct. Les agrégateurs de banques centrales (la BCE, la Narodowy Bank Polski, les banques nationales de Roumanie, de Hongrie, de Moldavie et d'Ukraine) publient un taux de référence officiel par jour ouvré. Les services commerciaux (Open exchange rates, Currencylayer, Fixer, Currencyapi) se rafraîchissent à un intervalle qui dépend de votre formule. Pour les devises principales, les sources concordent de près ; pour des devises comme KES, GHS ou NGN, elles peuvent différer de plusieurs pour cent.
  • Un taux ancien. Le site utilise le taux enregistré lors de la dernière mise à jour. Mise à jour automatique des taux (Rate auto update), dans l'onglet Options, le rafraîchit toutes les heures, deux fois par jour (par défaut), chaque jour, chaque semaine ou chaque mois, via WP-Cron. WP-Cron ne s'exécute que lorsque quelqu'un visite le site : sur un site peu fréquenté, une mise à jour peut donc arriver en retard.
  • Vos propres modifications. Une marge dans le champ d'intérêt ou dans le code (les deux ci-dessous), un taux saisi à la main, ou l'arrondi du prix converti.

Pour vous rapprocher des taux du marché, passez à un agrégateur commercial : choisissez-le dans Agrégateur de devises (Currency aggregator), collez la clé de ce service dans Clé API de l'agrégateur (Aggregator API key), enregistrez, puis cliquez sur Mettre à jour tous les taux (Update all rates) dans l'onglet Devises (Currencies), suivi de Enregistrer les options (Save options). Les messages d'erreur et les limites de requêtes API sont expliqués dans erreurs de taux de change. Vous pouvez aussi brancher n'importe quelle autre source de taux comme agrégateur personnalisé.

Vérifier le taux réellement utilisé par votre site

Le champ du taux dans l'onglet Devises (Currencies) affiche le taux enregistré, issu de l'agrégateur. Le front-end utilise ce taux plus l'éventuelle marge. Pour voir le taux final, placez ceci sur une page en brouillon :

[wpcs_code_rate code=GBP]
[wpcs_price value=100]

La première ligne affiche le taux de GBP avec lequel les prix sont convertis, intérêt et modifications par le code compris ; la seconde doit être égale à 100 fois ce taux lorsque GBP est sélectionnée. Comparez la première ligne à votre source, et non le prix converti à un site de conversion : cette comparaison mélange taux, arrondi et décimales.

Ajouter une majoration au taux de change sans code : le champ d'intérêt

Chaque ligne de devise comporte un second champ après le taux, avec un signe plus entre les deux et l'indication intérêt (interest). Sur le front-end, le plugin utilise taux + intérêt. L'intérêt est un montant ajouté au taux, et non un pourcentage :

Base USDTauxIntérêtTaux utiliséMajoration
EUR0.860.02580.88583%
JPY151.304.539155.8393%
INR88.20-0.88287.318-1%

Pour obtenir un pourcentage, multipliez le taux actuel par ce pourcentage (3 % de 0,86 font 0,0258) et saisissez le résultat. Comme le montant reste le même alors que le taux évolue, le pourcentage dérive un peu avec le temps ; recalculez-le de temps en temps, ou utilisez le code ci-dessous. Un intérêt négatif abaisse le taux. La page de réglages affiche toujours le taux sans l'intérêt, de sorte que l'agrégateur peut continuer à mettre à jour le taux pendant que votre marge reste séparée. Le convertisseur, le tableau des taux et l'icône d'information sur le prix utilisent le même taux plus intérêt que vos prix.

N'utilisez le champ d'intérêt que pour les devises dont le taux se met à jour sans erreur. Lorsqu'une mise à jour automatique n'obtient aucun taux pour une devise, celle-ci conserve le taux que le site utilise à cet instant, qui contient déjà l'intérêt, et il est enregistré comme nouveau taux stocké ; chaque mise à jour échouée ajoute à nouveau la marge. Vérifiez ces lignes après une erreur de l'agrégateur, ou utilisez la version par le code, qui n'a pas cet effet. Pour la même raison, après Mettre à jour tous les taux (Update all rates), cliquez toujours sur Enregistrer les options (Save options) avant de quitter la page.

Une majoration en pourcentage par le code

Le filtre wpcs_currency_data_manipulation modifie les données des devises à chaque fois que le plugin les lit : un pourcentage reste donc un pourcentage, quoi que fasse le taux. Le plugin lit aussi ces données sur sa page de réglages et lorsqu'il met à jour les taux, puis les réécrit. Une majoration ajoutée à cet endroit serait enregistrée dans le taux stocké, puis ajoutée de nouveau ; le snippet ignore donc ces moments :

/*
 * WPCS: add a percentage markup to exchange rates on the front end.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('wpcs_currency_data_manipulation', function ($currencies) {
    // Keep stored rates clean: no markup on the plugin settings page,
    // during automatic rate updates and in the "Update all rates" request.
    if ((is_admin() && !wp_doing_ajax())
        || wp_doing_cron()
        || (isset($_REQUEST['action']) && $_REQUEST['action'] === 'wpcs_save_etalon')) {
        return $currencies;
    }

    $markup = array(
        'EUR' => 3,    // +3 %
        'GBP' => 2.5,  // +2.5 %
    );

    foreach ($markup as $code => $percent) {
        if (isset($currencies[$code]['rate'])) {
            $currencies[$code]['rate'] = (float) $currencies[$code]['rate'] * (1 + $percent / 100);
        }
    }

    return $currencies;
});

N'indiquez pas la devise de base. Le filtre s'exécute après l'ajout du champ d'intérêt : utilisez donc l'un ou l'autre pour une devise, pas les deux. Le court exemple de la FAQ sur le réglage manuel des taux n'a pas cette vérification : seul, il ajoute la majoration à nouveau à chaque enregistrement des réglages.

Conserver un taux manuel fixe, comme 1:1

Certains sites veulent le même nombre dans deux devises (un livre à 20 EUR et 20 CHF), ou un taux convenu avec un partenaire. Le champ du taux accepte n'importe quel nombre que vous saisissez ; le travail consiste à empêcher le plugin de le remplacer.

Tous les taux fixés à la main

  1. Dans l'onglet Devises (Currencies), saisissez le taux dans la ligne, par exemple 1 pour CHF lorsque la devise de base est EUR.
  2. Dans l'onglet Options, réglez Mise à jour automatique des taux (Rate auto update) sur pas de mise à jour automatique (no auto update).
  3. Cliquez sur Enregistrer les options (Save options).

Dès lors, les taux ne changent que lorsque vous les modifiez. Évitez Mettre à jour tous les taux (Update all rates) et le bouton de mise à jour de la ligne : ils récupèrent de nouveaux taux de l'agrégateur dans le formulaire, et l'enregistrement remplacerait votre taux fixe. Si vous en cliquez un par erreur, saisissez à nouveau le taux avant d'enregistrer.

Un taux fixe pendant que les autres se mettent à jour

Mise à jour automatique des taux (Rate auto update) s'applique à toutes les devises à la fois ; il n'y a pas de verrou par devise. Pour garder CHF à 1 pendant que les autres devises suivent le marché, fixez-le par le code. L'agrégateur peut continuer à mettre à jour le taux CHF enregistré, mais le site utilise toujours 1 :

/*
 * WPCS: always use 1 EUR = 1 CHF (the base currency is EUR).
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('wpcs_currency_data_manipulation', function ($currencies) {
    if (isset($currencies['CHF'])) {
        $currencies['CHF']['rate'] = 1;
    }
    return $currencies;
});

Un taux fixé donne le même résultat à chaque fois : ce snippet n'a donc pas besoin de vérification d'administration. Il prend le pas sur le champ d'intérêt de cette devise. Si vous voulez votre propre montant par prix plutôt qu'un seul taux, par exemple 20 EUR mais 19 CHF, utilisez plutôt les prix fixes par devise.

Quand l'intervalle de mise à jour ne change pas

Le plugin planifie sa tâche de mise à jour une seule fois, avec l'intervalle choisi à ce moment-là. Choisir un autre intervalle plus tard ne remplace pas la planification existante : l'ancien intervalle continue donc de s'appliquer. Pour appliquer le nouveau, supprimez l'événement planifié wpcs_currencies_rate_auto_update (avec un plugin de gestion de cron, ou avec WP-CLI : wp cron event delete wpcs_currencies_rate_auto_update) ; le plugin le planifie à nouveau avec le réglage actuel à la prochaine page vue. Si les taux ne se mettent jamais à jour, lisez pourquoi la mise à jour automatique des taux ne fonctionne pas.

Liste de contrôle

  • [wpcs_code_rate code=XXX] affiche le taux attendu, et [wpcs_price value=100] est égal à 100 fois ce taux.
  • L'agrégateur et sa clé API correspondent à la précision dont vous avez besoin.
  • Chaque devise a une marge dans le champ d'intérêt ou dans le code, jamais les deux, et la devise de base n'en a aucune.
  • Taux fixes : Mise à jour automatique des taux (Rate auto update) est sur pas de mise à jour automatique (no auto update), ou le taux est fixé par le code.
  • Les caches de pages sont vidés après la modification des taux ; les pages en cache affichent les anciens prix jusque-là.

Si le taux utilisé diffère encore de la source dans une mesure que vous ne savez pas expliquer, publiez l'agrégateur, la devise et le résultat de [wpcs_code_rate] sur le forum d'assistance WPCS.