Prix fixe par devise dans WooCommerce : configuration, règles et limites
Un prix fixe par devise dans WooCommerce signifie que vous décidez de ce que coûte un produit dans chaque devise au lieu de laisser le taux de change en décider : 49 en dollars, 45 en euros, 3 900 en roupies, quoi que fasse le taux cette semaine. FOX le permet avec des champs par produit pour chaque devise. La mise en place prend une minute, et la plupart des problèmes viennent de quelques règles peu évidentes : où va le prix de base, ce que signifie un champ vide, quels types de produits lisent les champs et qui a le droit de les enregistrer. Tout est expliqué ci-dessous.
Comment fonctionnent les prix fixes par devise
Chaque produit conserve son prix WooCommerce normal, saisi dans la devise de base de la boutique. Ce prix reste obligatoire : un produit qui n'a que des prix fixes et un prix WooCommerce vide n'a aucun prix. Pour toute autre devise, FOX cherche un prix fixe sur le produit :
- Si le champ de la devise du visiteur est rempli, ce montant est utilisé tel quel, sans conversion.
- S'il est vide, le prix est le prix de base multiplié par le taux de la devise, comme pour tout produit sans prix fixes.
- Un 0 compte comme vide. Un prix fixe ne peut pas rendre un produit gratuit dans une devise.
Vous pouvez donc fixer les prix pour une devise et laisser les autres se convertir, ou ne fixer que les produits qui ont besoin de prix ronds. Il n'existe pas de champ fixe pour la devise de base elle-même : son prix est le champ WooCommerce.
Configurer les prix fixes
- Dans WooCommerce → Réglages → Devise (WooCommerce → Settings → Currency), onglet Devises (Currencies), vérifiez que la devise de la boutique est marquée dans la colonne De base (Basic). Si la mauvaise devise est marquée, l'écran du produit propose des champs pour les mauvaises devises.
- Dans l'onglet Avancé (Advanced), réglez Plusieurs devises autorisées (Is multiple allowed) sur Oui (Yes). Les prix fixes n'ont de sens que si le client paie dans la devise sélectionnée, et l'option des prix fixes est masquée et désactivée tant que ce réglage est sur Non (No).
- Activez Règles de prix fixes individuelles pour chaque produit (Individual fixed prices rules for each product) et enregistrez.
- Ouvrez un produit. Dans Données produit → Général (Product data → General), sous les champs de prix WooCommerce, cliquez sur Règles de prix fixes du produit (The product fixed prices rules).
- Choisissez une devise dans la liste déroulante et cliquez sur Ajouter (Add), ou cliquez sur Tout ajouter (Add all) pour toutes les devises à la fois. Chaque devise reçoit un champ Tarif normal (Regular price) et un champ Tarif promotionnel (Sale price) ; un champ vide affiche auto, ce qui signifie une conversion par le taux. Supprimer (Remove) efface la ligne.
- Mettez le produit à jour et vérifiez le prix sur le front-end dans chaque devise.
Saisissez les montants avec le séparateur décimal défini dans WooCommerce → Réglages → Général (WooCommerce → Settings → General) et sans séparateur des milliers : 745920, et non 745.920. FOX supprime le séparateur des milliers de WooCommerce et lit le séparateur décimal ; un nombre saisi dans le format d'une autre région est donc enregistré avec le mauvais ordre de grandeur : 745.92 au lieu de 745920, ou 4550 au lieu de 45.50.
Produits variables
Les prix fixes se définissent par variation, et non sur le produit parent. Développez une variation dans Données produit → Variations (Product data → Variations) et le même bouton Règles de prix fixes du produit (The product fixed prices rules) apparaît en bas de ses réglages. Enregistrez les variations. La fourchette de prix affichée sur la page de la boutique est construite à partir des prix des variations dans la devise du visiteur, prix fixes compris.
Beaucoup de produits à la fois
Les prix fixes sont des métadonnées de produit nommées d'après le code de la devise : _woocs_regular_price_EUR et _woocs_sale_price_EUR, enregistrées sur le produit ou sur chaque variation. Un outil d'importation ou un éditeur en masse qui écrit des métadonnées personnalisées peut donc les remplir pour tout un catalogue ; voir modifier en masse les champs de prix fixes et définir un prix fixe par programmation. Pour lire un prix fixe dans votre propre code, pour un flux ou un modèle personnalisé :
/*
* FOX: the fixed price of a product or variation in a currency,
* or null when the field is empty and the price is converted by rate.
* $type is 'regular' or 'sale'.
* Child theme functions.php or a code snippets plugin.
*/
function my_fox_fixed_price( $product_id, $currency, $type = 'regular' ) {
$value = (float) get_post_meta( $product_id, '_woocs_' . $type . '_price_' . strtoupper( $currency ), true );
return $value > 0 ? $value : null;
}
// Example: my_fox_fixed_price( 123, 'EUR' ) returns 45.0, or null
Un champ vidé est enregistré sous la forme -1, ce qui explique que la fonction traite toute valeur non supérieure à zéro comme « aucun prix fixe ».
Prix promotionnels, taxes, arrondis et remises
- Promotions. Lorsque le produit est en promotion, FOX utilise le champ Tarif promotionnel (Sale price) de la devise. Si ce champ est vide, la devise affiche son prix fixe normal sans aucune remise : la promotion de base n'y est pas convertie. Lorsque vous lancez une promotion, remplissez le champ promotionnel de chaque devise qui a un prix fixe normal.
- Taxes. Les prix fixes suivent le même réglage Prix saisis avec la taxe (Prices entered with tax) que vos prix de base. Avec des prix saisis TTC, WooCommerce recalcule tout de même le montant TTC pour les clients dont le taux de taxe diffère de celui de l'emplacement de base de la boutique : un prix fixe de 49.00 peut donc s'afficher différemment pour un tel client. C'est le comportement fiscal de WooCommerce, contrôlé par son filtre
woocommerce_adjust_non_base_location_prices. - Arrondis. Les extraits d'arrondi sur
woocs_raw_woocommerce_pricereçoivent aussi les prix fixes. Arrondir les prix convertis montre comment en exclure ces devises. - Plugins de remises et de tarification. FOX remplace le prix qu'il reçoit par le prix fixe : une remise qu'un autre plugin a appliquée avant ce point (tarification dynamique, paliers de quantité, prix par rôle ou de gros) est donc perdue dans les devises qui ont un prix fixe. Un plugin ou un extrait peut appliquer sa remise au prix fixe via le filtre woocs_fixed_raw_woocommerce_price. Consultez d'abord la page de compatibilité du plugin sur ce site.
- Filtre de prix. Le filtre de prix de WooCommerce recherche dans les prix de base de la base de données et n'affiche que la fourchette convertie par le taux. Un produit dont le prix fixe est très éloigné de son prix converti peut se retrouver du mauvais côté d'une tranche du filtre.
Les codes promo et la livraison ont leurs propres montants par devise : Montant fixe individuel pour le code promo (Individual fixed amount for coupon) et Montant fixe individuel pour la livraison (Individual fixed amount for shipping) dans l'onglet Avancé (Advanced). Pour la livraison, voir conversion de devise des frais de livraison.
Quels types de produits prennent en charge les prix fixes
Les champs sont conçus pour les produits WooCommerce standard. Ils apparaissent pour les produits simples et externes, pour chaque variation d'un produit variable, ainsi que pour les types subscription, composite, bundle et box_product. Savoir si un prix fixe convient dans le panier dépend de la façon dont le type de produit calcule son prix :
- Les produits simples, externes et variables lisent directement le prix fixe.
- Les lots et les produits composites additionnent les prix de leurs éléments dans leur propre code. Un prix fixe remplace le prix du produit conteneur, et non le calcul de l'extension. Lisez la page de votre extension : Product Bundles, Composite Products, YITH Product Bundles.
- Les réservations, cartes cadeaux, cours et autres types de produits personnalisés calculent leurs prix à leur manière (selon la durée, selon un montant choisi par l'acheteur) et sont convertis par le taux. Ils n'ont pas de champs fixes.
- Abonnements : le prix fixe devient le prix récurrent, mais sur les produits avec des frais d'inscription, il remplace aussi le premier paiement, si bien que ces frais sont perdus. Détails dans WooCommerce Subscriptions en plusieurs devises.
Pour afficher les champs pour un autre type de produit, ajoutez son slug avec le filtre woocs_product_fixed_price_data_simple_types. Cela fait apparaître les champs ; cela ne fait pas utiliser ces champs par le type. Testez une vraie commande dans une deuxième devise avant de vous y fier.
Des prix différents selon le pays
Les prix fixes appartiennent aux devises, pas aux pays. Il y a deux façons de fixer les prix par pays :
- Chaque pays a sa propre devise. Définissez des prix fixes par devise et associez les pays aux devises dans l'onglet GeoIP : les visiteurs de Suisse ouvrent la boutique en francs et voient votre prix en francs. La configuration est décrite dans changer automatiquement la devise selon le pays et prix WooCommerce selon le pays.
- Plusieurs pays partagent une devise mais ont besoin de prix différents. Activez Règles GeoIP individuelles pour chaque produit (Individual GeoIP rules for each product) et utilisez Règles GeoIP personnalisées du produit (The product custom GeoIP rules) sur le produit : vous définissez un prix pour un groupe de pays, dans la devise de base, et il est converti par le taux dans la devise qu'utilise le visiteur. Un prix fixe pour la devise du visiteur est prioritaire sur lui. Deux prix fixes différents dans la même devise pour deux pays ne sont pas possibles.
Les prix fixes rendent une devise moins chère qu'une autre, et un visiteur peut passer à la moins chère. Paiement selon les règles GeoIP (Checkout by GeoIP rules) dans l'onglet Avancé (Advanced) fait payer les clients dans la devise de leur pays ; voir devise de paiement selon le pays du client pour son fonctionnement et ses limites.
Champs absents, non enregistrés ou erronés
Le bouton ou les champs sont absents
- Plusieurs devises autorisées (Is multiple allowed) est sur Non (No), ou Règles de prix fixes individuelles pour chaque produit (Individual fixed prices rules for each product) est désactivé.
- Le type de produit ne figure pas dans la liste ci-dessus. Sur un produit variable, regardez à l'intérieur de chaque variation.
- La liste déroulante ne propose que certaines devises : la devise de base n'apparaît jamais, et les devises qui ont déjà une ligne ne sont plus proposées.
- Une erreur JavaScript d'un autre plugin sur l'écran de modification du produit garde le panneau de FOX masqué, car le panneau est affiché par script. Ouvrez la console du navigateur (F12) sur l'écran du produit, repérez le plugin nommé dans l'erreur et désactivez-le pour confirmer. Les codes de devise qui ne sont pas de vrais codes ISO provoquent aussi de telles erreurs ; voir codes de devise personnalisés.
Les valeurs ne s'enregistrent pas
FOX n'enregistre les prix fixes que pour les utilisateurs disposant de la capacité manage_options, que seuls les administrateurs ont par défaut. Un gestionnaire de boutique peut voir les champs et y saisir des valeurs, mais elles sont abandonnées en silence, et l'écran continue d'afficher ce qui était enregistré avant. Enregistrez en tant qu'administrateur, ou accordez la capacité uniquement pendant l'enregistrement d'un produit :
/*
* Let users who can edit products (Shop Manager) save FOX fixed prices.
* manage_options is granted only during the product save actions.
* Child theme functions.php or a code snippets plugin.
*/
add_filter( 'user_has_cap', function ( $allcaps, $caps, $args, $user ) {
if ( in_array( 'manage_options', $caps, true ) && ! empty( $allcaps['edit_products'] ) ) {
if ( doing_action( 'woocommerce_process_product_meta' )
|| doing_action( 'woocommerce_save_product_variation' )
|| doing_action( 'woocommerce_process_product_meta_variable' ) ) {
$allcaps['manage_options'] = true;
}
}
return $allcaps;
}, 10, 4 );
Les autres plugins qui vérifient manage_options pendant l'enregistrement d'un produit voient eux aussi cette capacité durant ces actions ; n'ajoutez donc ceci que si le rôle de gestionnaire de boutique doit gérer les prix.
Le prix est erroné sur le front-end
- Vérifiez la valeur enregistrée : la métadonnée
_woocs_regular_price_XXXsur le produit, ou sur l'ID de la variation pour les produits variables. Une valeur cent ou mille fois trop grande ou trop petite correspond au problème de séparateur décrit dans la configuration. - Les prix changent un instant après le chargement de la page, ou le code source de la page (Ctrl+U) montre d'autres montants que l'écran : la page provient d'un cache, ou le serveur ne connaissait pas la devise du visiteur. Voir le sélecteur de devises revient à la devise par défaut.
- Le prix fixe est affiché mais le total du panier diffère : un plugin de remise, de lot ou de tarification calcule le panier. Testez avec seulement WooCommerce et FOX actifs et un thème par défaut, puis réactivez les autres un par un.
Si le prix fixe n'est toujours pas utilisé, ouvrez un sujet sur le forum de support de FOX avec le lien du produit, son type et les valeurs de métadonnées enregistrées, et nous l'examinerons.