Wo WooCommerce Intermédiaire

Dynamic Pricing Engine — Guide complet

Guide complet : installation, 4 types de règles, segments, scraping concurrentiel, A/B testing, garde-fous 3 niveaux.

Mis à jour Version du module 1.0.0

Bienvenue dans la documentation complète de Dynamic Pricing Engine, le moteur de tarification dynamique pour WooCommerce édité par DataFirefly. Ce guide couvre l’installation, la configuration initiale, chaque type de règle, la segmentation client, le scraping concurrentiel, l’A/B testing, le journal, les garde-fous, et la désinstallation.

Prérequis : WordPress 6.0+, WooCommerce 8.0+, PHP 7.4+. Compatible HPOS et blocs Checkout.

Installation

Téléversement du plugin

  1. Depuis le back-office WordPress, allez dans Extensions → Ajouter → Téléverser une extension.
  2. Sélectionnez le fichier dfdynamicpricing.zip et cliquez sur Installer maintenant.
  3. Une fois l’installation terminée, cliquez sur Activer l’extension.

Ce qui se passe à l’activation

Le plugin crée 6 tables personnalisées (préfixées par wp_dfdpe_) :

  • wp_dfdpe_rules — les règles de prix
  • wp_dfdpe_logs — le journal des ajustements
  • wp_dfdpe_segments — les segments clients (3 seedés automatiquement)
  • wp_dfdpe_competitors — le suivi concurrentiel
  • wp_dfdpe_ab_tests — les tests A/B
  • wp_dfdpe_ab_events — les événements d’exposition, ATC et conversion

Deux tâches cron sont également planifiées : le scraping concurrentiel (horaire par défaut) et la purge du journal (quotidienne).

Un nouveau menu Dynamic Pricing apparaît dans la barre latérale avec 7 sous-menus : Tableau de bord, Règles, Segments, Concurrents, A/B Testing, Journal, Réglages. Toutes les actions requièrent la capacité WordPress manage_woocommerce.

Configuration initiale (Réglages)

Avant de créer votre première règle, faites un tour rapide dans Dynamic Pricing → Réglages pour ajuster les paramètres globaux.

Journal

  • Activer le journal : coché par défaut. Chaque ajustement est enregistré avec produit, règle, client, contexte.
  • Rétention (jours) : 60 jours par défaut. La purge automatique tourne quotidiennement.

Le journal est rate-limité à 1 entrée par session, produit et heure pour éviter le flood. Vous pouvez le désactiver complètement si vous ne l’utilisez pas.

Garde-fous globaux

  • Prix plancher (% du prix initial) : par exemple, 70 = ne jamais descendre sous 70 % du prix initial. 0 = désactivé.
  • Prix plafond (% du prix initial) : par exemple, 130 = ne jamais dépasser 130 %. 0 = désactivé.
  • Ne jamais vendre sous le coût d’achat : à activer si vous stockez le coût dans un meta produit.
  • Clé meta du coût d’achat : _cost par défaut (compatible WooCommerce Cost of Goods).

Scraper concurrents

  • Fréquence d’exécution : horaire, deux fois par jour ou quotidienne. Le scraper traite 25 URLs par batch.

Affichage front-office

  • Afficher le prix initial barré : utile pour un effet promo visible. À désactiver pour des tests A/B confidentiels.

Créer votre première règle

Rendez-vous dans Dynamic Pricing → Règles → Ajouter. Chaque règle possède les mêmes champs de base, quel que soit son type.

Champs communs

  • Nom : libellé interne, utile dans le journal (ex : « Happy hour 18h-20h »).
  • Type : Heure, Stock, Segment client, ou Concurrent.
  • Statut : Actif ou Inactif. Une règle inactive n’est jamais évaluée.
  • Priorité : les règles s’exécutent dans l’ordre croissant de priorité. Chaque règle travaille sur le résultat de la précédente.
  • Portée : Global, Catégorie, Étiquette, ou Produit spécifique.
  • Ajustement : Pourcentage, Montant fixe, Valeur définie, ou Match concurrent (uniquement avec le type Concurrent).
  • Plancher / Plafond : garde-fous optionnels au niveau de la règle.
  • Fenêtre de dates : dates de début et de fin pour rendre la règle active uniquement pendant une période donnée.
  • A/B Test : lien optionnel vers un test A/B et sa variante (voir section A/B Testing).

Conseil de priorisation : commencez par les règles les plus larges (globales) à faible priorité, puis affinez avec des règles ciblées à priorité plus élevée. Les garde-fous globaux configurés dans Réglages s’appliquent toujours en dernier.

Type 1 — Règle par heure

Ajuste le prix selon l’heure et le jour de la semaine. Idéal pour l’effet happy hour, les promotions week-end, ou les tarifs de nuit.

Conditions disponibles

  • Jours de la semaine : sélectionnez un ou plusieurs jours (lundi à dimanche, format ISO).
  • Heure de début / Heure de fin : au format 24h. Les plages qui chevauchent minuit sont gérées automatiquement (ex : 22h-02h).
  • Fuseau horaire : site (par défaut, utilise le fuseau WordPress) ou un fuseau spécifique (ex : Europe/Paris).

Exemples concrets

  • Happy hour : −15 %, jeudi-vendredi, 18h-20h, fuseau Europe/Paris.
  • Weekend promo : −10 %, samedi-dimanche, 00h-23h59.
  • Prix de nuit : +5 %, tous les jours, 22h-06h (chevauche minuit, géré automatiquement).

Type 2 — Règle par stock

Ajuste le prix selon le niveau de stock du produit. Utile pour déstocker rapidement les produits en surstock ou valoriser ceux devenant rares.

Conditions disponibles

  • Opérateur : <, <=, ==, >=, >.
  • Seuil : nombre entier.
  • Mode : Absolu (nombre d’unités) ou Pourcentage du stock initial (nécessite le meta _initial_stock défini sur le produit).

Exemples concrets

  • Déstockage : stock >= 50 (surstock) → −20 %.
  • Rareté : stock < 5 → +10 %.
  • Stock initial pourcentage : mode pourcentage, stock < 20 % du stock initial → −5 %.

Pour utiliser le mode Pourcentage, ajoutez un champ meta _initial_stock à vos produits (via WP All Import, ACF, ou un simple update_post_meta). Sans ce meta, le mode pourcentage est ignoré.

Type 3 — Règle par segment client

Applique un ajustement uniquement aux clients appartenant à un ou plusieurs segments définis.

Conditions disponibles

  • Segments : un ou plusieurs segments existants (voir section Segments).
  • Correspondance : Any (le client appartient à au moins un segment) ou All (il appartient à tous).

Exemples concrets

  • Fidélité : segment loyal-customers, ajustement −10 %.
  • Reconquête : segment dormant (à créer), ajustement −20 % pendant 7 jours.
  • B2B : segment b2b (rôle wholesale), ajustement −25 %.

Type 4 — Règle par prix concurrent

Aligne votre prix sur celui d’un concurrent que vous avez configuré dans la section Concurrents. Trois stratégies disponibles.

Stratégies

  • Match : votre prix devient exactement le prix du concurrent.
  • Undercut : votre prix passe sous celui du concurrent, en pourcentage ou en montant fixe.
  • Overprice : votre prix passe au-dessus du concurrent (positionnement premium).

Conditions disponibles

  • Mode : Pourcentage ou Montant fixe.
  • Montant : pourcentage (ex : 5 pour 5 %) ou montant en devise.
  • Âge maximum des données (heures) : au-delà, les données du scraping sont considérées trop anciennes et la règle bascule sur le comportement de fallback.
  • Fallback : comportement si les données concurrent sont indisponibles (par exemple, appliquer un ajustement neutre ou skipper la règle).

Exemple concret

Undercut de 3 % du concurrent A, avec âge max de 6 heures. Si le concurrent A n’a pas été scrapé depuis 6 heures, la règle est ignorée et le prix reste inchangé.

Segments clients

Un segment est une combinaison de critères qui définit un groupe de clients. Une fois créé, un segment peut être ciblé par une règle de type Segment client.

Segments seedés à l’activation

  • new-customers : clients avec 0 ou 1 commande.
  • loyal-customers : clients avec 5 commandes ou plus.
  • vip : clients ayant dépensé au moins 500 €.

Créer un segment

Depuis Dynamic Pricing → Segments → Ajouter, définissez :

  • Nom et Slug (auto-généré si vide).
  • Description (optionnelle, pour votre équipe).
  • Critères : ajoutez autant de lignes que nécessaire. Tous les critères doivent être satisfaits (ET logique).
  • Statut : actif ou inactif.

Champs disponibles pour les critères

  • order_count — nombre de commandes du client.
  • total_spent — total dépensé (dans la devise du site).
  • is_guest — 1 si le visiteur n’est pas connecté, 0 sinon.
  • user_roles — rôles WordPress du client (ex : customer, subscriber, wholesale).
  • days_since_last_order — jours écoulés depuis la dernière commande.

Opérateurs disponibles

Dix opérateurs : ==, !=, >, >=, <, <=, in, not_in, contains, not_contains.

Pour in et not_in, séparez les valeurs par des virgules dans le champ Valeur (ex : customer,subscriber).

Exemple avancé — segment « Reconquête » : order_count >= 2 + days_since_last_order >= 60. Cible les anciens clients qui n’ont pas commandé depuis 2 mois.

Concurrents (scraping)

Le scraper récupère automatiquement le prix affiché sur une page produit d’un concurrent, selon une fréquence configurable. Les prix récupérés sont ensuite utilisés par les règles de type Concurrent.

Ajouter un concurrent

Depuis Dynamic Pricing → Concurrents → Ajouter :

  1. Produit WooCommerce (ID) : l’ID du produit local auquel rattacher le suivi.
  2. Nom du concurrent : libellé libre (ex : « Amazon », « Fnac »).
  3. URL : la page produit du concurrent à scraper.
  4. Type de sélecteur : CSS, XPath, Regex, ou JSON-LD.
  5. Sélecteur : le sélecteur qui pointe vers le prix (voir exemples ci-dessous).
  6. Devise : par défaut la devise WooCommerce du site.
  7. Statut : suivi actif ou en pause.

Types de sélecteurs

  • CSS : sélecteur CSS classique. Exemples : .price .amount, #product-price, span[itemprop=price].
  • XPath : expression XPath. Exemple : //span[@class="price"].
  • Regex : expression régulière PHP. Exemple : /€s*([d,.]+)/ — le premier groupe capturé est utilisé.
  • JSON-LD : auto-détection Schema.org. Cherche price, offers.price, offers.lowPrice dans les balises JSON-LD. Laissez le champ Sélecteur vide.

Parsing des prix

Le scraper gère les formats européens (1 299,90) et américains (1,299.90) automatiquement. Les symboles de devise et espaces sont nettoyés.

Exécution manuelle

Le bouton Scraper maintenant à côté de chaque concurrent force une mise à jour immédiate en AJAX. Utile pour tester un nouveau sélecteur.

Statuts possibles

  • pending — jamais scrapé, en attente du prochain cron.
  • ok — dernière exécution réussie.
  • error — dernière exécution en échec (message stocké dans le champ last_error).

Respect des CGU des concurrents : le scraper effectue une requête HTTP simple avec un timeout court, mais il vous appartient de vérifier que le scraping est autorisé par les Conditions Générales d’Utilisation des sites cibles. Certaines juridictions encadrent cette pratique.

A/B Testing

Le module A/B intégré permet de comparer plusieurs stratégies de prix sur un même produit et de mesurer leur impact en temps réel (expositions, ajouts panier, conversions, RPV).

Créer un test

Depuis Dynamic Pricing → A/B Testing → Nouveau test :

  1. Nom et slug.
  2. Variantes : liste de libellés séparés par des virgules. Par défaut A,B.
  3. Répartition du trafic : poids relatif par variante (normalisé automatiquement). Par exemple 50/50, 70/30, ou 1/1/1 pour trois variantes équi-réparties.
  4. Statut : Brouillon, En cours, En pause, ou Terminé. Seul un test En cours assigne des visiteurs.
  5. Fenêtre : dates optionnelles de début et de fin.

Lier une règle à une variante

Dans le formulaire d’une règle, sélectionnez le test A/B et la variante ciblée. La règle ne s’appliquera qu’aux visiteurs assignés à cette variante précise.

Comment fonctionne l’assignation

À la première exposition, le plugin attribue le visiteur à une variante selon les poids configurés, puis stocke ce choix dans un cookie dfdpe_ab. Un cookie de session distinct dfdpe_sid permet de suivre le même visiteur sur l’ensemble de sa session, connecté ou non.

Événements suivis

  • exposure — première fois que le visiteur voit un prix affecté par le test.
  • atc — ajout au panier (hook woocommerce_add_to_cart).
  • conversion — commande finalisée (hook woocommerce_thankyou). Le montant total de la commande est enregistré.

Métriques calculées (page Résultats)

  • Expositions et Sessions uniques.
  • CR ATC — taux d’ajout au panier (ATC / expositions).
  • CR Conv. — taux de conversion (conversions / expositions).
  • Revenu — total des conversions.
  • RPV — revenu par visiteur (revenu / expositions). C’est la métrique clé de décision : la variante avec le RPV le plus élevé est mise en avant automatiquement (badge Gagnant).

Bonne pratique : laissez tourner un test au moins 2 semaines avant de conclure. Un test A/B fiable nécessite plusieurs milliers d’expositions pour dégager une significativité statistique.

Journal des ajustements

Chaque ajustement de prix appliqué au front-office peut être loggué. Le journal est accessible via Dynamic Pricing → Journal.

Informations enregistrées

  • Date et heure.
  • Produit et variation.
  • Règle déclenchée (ID).
  • Client (ID) ou session anonyme.
  • Prix initial, prix final, montant de l’ajustement.
  • Test A/B et variante (le cas échéant).
  • Contexte : frontend, cart, checkout.

Filtres disponibles

Vous pouvez filtrer par ID de produit, ID de règle, ou ID de test A/B. La pagination affiche 50 entrées par page.

Rate-limiting

Pour éviter le flood, le plugin limite l’enregistrement à 1 entrée par session, produit et heure. Une session qui consulte 100 fois la même fiche produit dans l’heure ne génère qu’une seule ligne.

Purge automatique

Une tâche cron quotidienne (dfdpe_cron_purge_logs) supprime les entrées plus anciennes que la rétention configurée (60 jours par défaut).

Garde-fous : comment ça marche

Trois niveaux de protection successifs empêchent votre prix final d’atteindre un niveau dangereux.

Niveau 1 — Garde-fous par règle

Chaque règle peut définir son propre plancher et plafond. Ils s’appliquent immédiatement après l’ajustement de cette règle. Utile pour capper les effets d’une règle particulière (ex : « la happy hour ne peut jamais descendre sous 30 €, quel que soit le prix initial »).

Niveau 2 — Garde-fous globaux

Définis dans Réglages, en pourcentage du prix initial :

  • Prix plancher : le prix final ne peut pas descendre sous ce pourcentage.
  • Prix plafond : le prix final ne peut pas dépasser ce pourcentage.

Exemple : plancher à 70 % et plafond à 130 %. Un produit à 100 € ne pourra jamais descendre sous 70 € ni dépasser 130 €, quelles que soient les règles appliquées.

Niveau 3 — Protection coût d’achat

Si activée dans Réglages, cette protection empêche le prix final de descendre sous la valeur du meta _cost (ou de la clé personnalisée que vous configurez). C’est la garantie ultime pour ne jamais vendre à perte.

Les trois niveaux sont cumulatifs et s’appliquent dans cet ordre : règle → global → coût. Le prix final est toujours le résultat le plus « protégé » des trois.

Compatibilité HPOS et cache

HPOS (High-Performance Order Storage)

Le plugin déclare la compatibilité avec custom_order_tables et cart_checkout_blocks dès l’initialisation. Aucune action supplémentaire n’est requise si vous avez activé HPOS dans WooCommerce.

Cache des prix de variations

WooCommerce met en cache les prix minimum et maximum des produits variables via un hash. Le plugin injecte un seed dynamique (utilisateur + session + bucket de 5 minutes) dans ce hash via le filtre woocommerce_get_variation_prices_hash, ce qui force WooCommerce à recalculer les prix au bon moment sans casser le cache pour les autres visiteurs.

FAQ

Puis-je combiner plusieurs règles sur le même produit ?

Oui. Les règles s’exécutent dans l’ordre de priorité, chacune travaillant sur le résultat de la précédente. Vous pouvez ainsi enchaîner « −10 % VIP » puis « plafond à 130 % du coût ».

Les règles s’appliquent-elles aussi au panier et au checkout ?

Oui. Un hook sur woocommerce_before_calculate_totals recalcule les prix des lignes de panier à chaque affichage.

Le plugin est-il compatible avec les caches serveur (Redis, Varnish) ?

Oui, mais si votre cache est très agressif au niveau de la page complète, les prix affichés peuvent être ceux mis en cache. Pour un affichage dynamique fiable, excluez les pages produit du cache full-page, ou utilisez des fragments ESI.

Puis-je désactiver le plugin sans perdre mes règles ?

Oui. La désactivation ne supprime aucune donnée. Seule la désinstallation via Extensions → Supprimer déclenche le script uninstall.php.

Comment exporter mes données ?

Toutes les données sont stockées dans les 6 tables wp_dfdpe_*. Vous pouvez les exporter via phpMyAdmin, WP-CLI (wp db export), ou n’importe quel outil de sauvegarde WordPress.

Désinstallation

Pour désinstaller complètement :

  1. Désactivez le plugin depuis Extensions.
  2. Cliquez sur Supprimer.

Le script uninstall.php supprime alors :

  • Les 6 tables wp_dfdpe_*.
  • Les 9 options WordPress créées.
  • Les tâches cron planifiées.

La désinstallation est définitive et non-réversible. Sauvegardez vos règles, segments et journal avant si vous souhaitez pouvoir revenir en arrière.

Support

Votre licence inclut 12 mois de support et de mises à jour. Pour toute question, contactez-nous via datafirefly.com/contact.

Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support