BEAR - WooCommerce Bulk Editor and Products Manager Professional

Modifier en masse les prix par devise dans une boutique WooCommerce multidevise

Pour modifier en masse les prix par devise dans WooCommerce, vérifiez d'abord qu'il y a quelque chose à modifier. La plupart des extensions multidevises stockent un seul prix par produit, dans la devise de base de la boutique, et le convertissent pour chaque visiteur selon le taux de change : le prix en dollars ou en livres n'existe qu'à l'écran. Ce qui est stocké, ce sont les prix fixes, ceux que vous définissez par produit pour une devise afin de remplacer le taux. Ce sont des meta de produit, et BEAR les modifie comme des champs meta : définissez-les, augmentez-les d'un pourcentage ou calculez-les à partir du prix de base avec arrondi. La seconde moitié de cet article traite du problème inverse : l'éditeur qui affiche les prix dans une devise convertie, et pourquoi cela compte avant toute exécution en pourcentage.

Quels prix par devise sont stockés, et où

ExtensionOù les prix fixes sont stockésComment les modifier dans BEAR
FOX (WOOCS), prix fixes_woocs_regular_price_USD et _woocs_sale_price_USD, une paire par code de deviseChamps meta de type nombre
FOX, règles GeoIP par produit_woocs_price_geo_countries, _woocs_regular_price_geo, _woocs_sale_price_geo (tableaux)Vue tableau : modification et copie, pas de pourcentages
WooCommerce Multilingual (WPML), prix personnalisésClés avec le code de devise à la fin, telles que _regular_price_EUR, _sale_price_EUR et _price_EURChamps meta de type nombre ; gardez la clé du prix actif synchronisée
Price Based on CountryUne clé de prix régulier, une de prix promotionnel et une de prix actif par zone de prix, nommées d'après l'ID de la zoneChamps meta de type nombre ; gardez la clé du prix actif synchronisée
Extensions qui gardent toutes les devises dans un seul champUn texte JSON ou un tableau par produitNon modifiable avec les opérations numériques

Confirmez les clés sur votre boutique avant de les rattacher. Saisissez des prix fixes à la main sur un produit, puis, dans l'onglet Champs meta de BEAR, entrez son ID dans Récupérer les clés meta d'un produit quelconque via son ID (Get meta keys from any product by its ID). Pour les prix définis par variation, utilisez l'ID d'une variation : ces prix sont stockés sur chaque variation, pas sur le parent. Rattachez les clés comme champs de type nombre (number), donnez-leur des titres courts tels que USD régulier (USD regular), enregistrez, puis activez leurs colonnes dans l'onglet Réglages, comme le décrit la documentation des champs meta.

FOX : modifier en masse les prix fixes par devise

FOX ne stocke les prix fixes que si Autoriser plusieurs (Is multiple allowed) et Règles de prix fixes individuelles pour chaque produit (Individual fixed prices rules for each product) sont tous deux activés dans ses réglages ; l'éditeur de produit affiche alors une paire de prix pour chaque devise sur les produits simples et sur chaque variation. Les clés sont _woocs_regular_price_ et _woocs_sale_price_ suivies du code de devise en majuscules. La FAQ sur la compatibilité avec FOX présente la même configuration pas à pas.

La manière dont FOX lit les valeurs détermine ce que vous écrivez :

  • Une valeur supérieure à 0 est un prix fixe pour cette devise.
  • Une valeur vide ou -1 signifie aucun prix fixe : FOX convertit le prix de base selon le taux. FOX enregistre lui-même -1 quand le champ est laissé vide dans l'éditeur de produit, ce qui explique que la colonne affiche -1 sur de nombreux produits, et définir une nouvelle valeur (set new) -1 est le moyen propre de supprimer des prix fixes en masse.
  • Si un produit est en promotion dans la devise de base mais n'a pas de prix promotionnel fixe en USD, FOX utilise le prix régulier fixe en USD, et les visiteurs en USD ne voient aucune remise. Quand vous lancez une promotion, définissez aussi les prix promotionnels fixes.

Exécutions utiles, chacune avec une seule ligne cochée. Pour la deuxième et la troisième, filtrez d'abord USD régulier de (USD regular from) 0.01, afin que les produits sans prix fixe soient laissés de côté.

  • Fixer les prix en USD à partir du prix de base. Cochez USD régulier, définir une nouvelle valeur 1.08 (votre taux), et dans Champs numériques sélectionnés (Selected num fields) choisissez * et tarif régulier (regular price). Avec 99 dans la liste déroulante d'arrondi, un produit à 46,00 reçoit un prix fixe en USD de 49,99. La page arrondi des prix liste les autres terminaisons.
  • Prix promotionnel en USD inférieur de 20 % au prix régulier en USD. Cochez USD promo (USD sale), définir une nouvelle valeur 0.8, et choisissez * avec USD régulier. La formule lit l'autre champ du même produit : une seule exécution suffit donc.
  • Augmenter de 5 % tous les prix fixes en USD. Cochez USD régulier et utilisez augmenter de % (increase by %) 5 ; répétez avec USD promo si les prix promotionnels doivent suivre.

Pour les produits variables, activez variations sur le panneau d'outils, car les prix fixes se trouvent sur les variations. Les règles GeoIP de FOX sont des tableaux : rattachez-les avec la vue Tableau (array) et modifiez-les ou copiez-les comme décrit dans modification en masse des données meta sérialisées. Les prix par rôle d'utilisateur de FOX ne dépendent pas du tout de la devise ; ils sont traités dans modifier en masse les prix de gros et les prix par rôle.

WooCommerce Multilingual et Price Based on Country : garder le prix actif synchronisé

WooCommerce conserve trois clés de prix par produit : _regular_price, _sale_price et _price, le prix réellement facturé, qu'il recalcule à l'enregistrement d'un produit. Les extensions qui reprennent ce schéma par devise ou par zone ont leur propre clé de prix actif et la mettent à jour dans leur propre routine d'enregistrement, dans l'éditeur de produit. Quand un autre outil n'écrit que la clé du prix régulier, la clé active garde l'ancien nombre, et la boutique et l'écran de modification du produit peuvent afficher des prix différents.

Modifiez donc les deux, en deux exécutions :

  1. Modifiez la clé du prix régulier, par exemple EUR régulier (EUR regular) avec définir une nouvelle valeur ou augmenter de %.
  2. Copiez-la dans la clé active : cochez EUR prix (EUR price), définir une nouvelle valeur 0, et choisissez + avec EUR régulier. Pour les produits en promotion dans cette devise, copiez plutôt depuis la clé promotionnelle, avec un filtre EUR promo de (EUR sale from) 0.01. Ce filtre fonctionne pour les produits simples ; les filtres de champs meta ne regardent que les produits parents : vérifiez donc à la main les variations en promotion.

Comparez ensuite un produit modifié avec un produit que vous avez enregistré à la main, en utilisant Récupérer les clés meta d'un produit quelconque via son ID pour les deux. Si le produit enregistré à la main a une clé supplémentaire que le produit modifié n'a pas, comme le _wcml_custom_prices_status de WooCommerce Multilingual, qui active les prix personnalisés pour un produit, rattachez-la et définissez-la de la même manière. Si la boutique compte aussi plusieurs langues, rappelez-vous que chaque traduction est un produit avec ses propres meta ; modifier en masse les prix dans toutes les langues WPML explique quelle langue BEAR modifie et comment reporter les changements sur les traductions.

L'éditeur affiche des prix convertis au lieu de la devise de base

Il arrive que la colonne tarif régulier (Regular price) affiche des prix dans une autre devise, alors qu'un nombre que vous saisissez est enregistré dans la devise de base. La cause tient à la façon dont les prix sont lus. BEAR lit le prix régulier et le prix promotionnel par les fonctions produit de WooCommerce, et les sélecteurs de devise convertissent les prix dans ces mêmes fonctions. BEAR charge le tableau et exécute les modifications en masse par admin-ajax.php, et de nombreux sélecteurs convertissent les prix dans de telles requêtes, parce que le panier de la boutique les utilise aussi. Beaucoup mémorisent aussi la dernière devise que vous avez choisie sur le front de la boutique, dans un cookie ou une session que portent vos requêtes d'administration, ce qui explique que la colonne puisse changer de devise un jour sans aucun changement de réglage.

Avec FOX, c'est géré : sur la page de l'éditeur, BEAR remet FOX dans la devise de base et retire les filtres de conversion de FOX. Avec d'autres sélecteurs, cela dépend du sélecteur. Ce n'est pas seulement un problème d'affichage : augmenter de % et diminuer de % (decrease by %) sur le prix régulier et le prix promotionnel partent du nombre que BEAR lit ; un prix converti plus 10 % serait donc enregistré comme nouveau prix de base. Les champs meta, prix fixes compris, ne sont pas concernés, pas plus que les valeurs lues par Champs numériques sélectionnés : les deux viennent directement des meta stockées.

Avant une exécution en pourcentage, comparez deux ou trois produits dans la colonne tarif régulier avec l'onglet Général de leurs pages de modification. S'ils diffèrent :

  1. Ouvrez le front de la boutique dans le même navigateur, sélectionnez la devise de base dans le sélecteur, et rechargez BEAR.
  2. Si la colonne affiche toujours des prix convertis, ajoutez l'extrait ci-dessous. Il retire les filtres de prix uniquement pendant les requêtes propres à BEAR, comme le fait le serveur MCP de BEAR pour ses connexions, et laisse intacts la boutique et le reste de wp-admin. Il a le même effet sur les extensions B2B qui affichent des prix par rôle dans l'éditeur.
/*
 * BEAR: read product prices without conversion or role-price filters during
 * the bulk editor's own requests, so the price columns and percentage
 * operations use the stored base prices.
 * Child theme functions.php or a code snippets plugin.
 */
add_action('admin_init', function () {
    if (!wp_doing_ajax() || empty($_REQUEST['action'])) {
        return;
    }

    $action = sanitize_key(wp_unslash($_REQUEST['action']));
    if (0 !== strpos($action, 'woobe_')) {
        return;
    }

    $hooks = array(
        'woocommerce_product_get_price',
        'woocommerce_product_get_regular_price',
        'woocommerce_product_get_sale_price',
        'woocommerce_product_variation_get_price',
        'woocommerce_product_variation_get_regular_price',
        'woocommerce_product_variation_get_sale_price',
    );

    foreach ($hooks as $hook) {
        remove_all_filters($hook);
    }
}, 999);

Rechargez BEAR et comparez à nouveau. Si un sélecteur convertit encore, c'est qu'il applique ses taux ailleurs ; demandez à ses auteurs comment désactiver la conversion sur les pages d'administration.

Avant une exécution en masse sur des prix par devise

  • Les clés sont confirmées avec Récupérer les clés meta d'un produit quelconque via son ID, sur une variation pour les prix de variation.
  • Les colonnes de prix fixes sont du type nombre et sont activées.
  • Pour WooCommerce Multilingual et Price Based on Country, la clé du prix actif est mise à jour dans une seconde exécution.
  • La colonne tarif régulier correspond aux pages de modification des produits avant toute exécution en pourcentage.
  • Une exécution erronée s'annule dans l'onglet Historique plutôt qu'en la corrigeant par un pourcentage inverse.

Si votre extension de devises stocke les prix d'une manière non listée ici, indiquez son nom et l'ID d'un produit sur le forum de support de BEAR.