# Dynamic Pricing Engine — Guida completa

> Guida completa al plugin Dynamic Pricing Engine per WooCommerce: installazione, configurazione, 4 tipi di regole (orario, stock, segmento, concorrente), segmenti cliente, scraping concorrenza, A/B testing nativo, log, protezioni a 3 livelli, FAQ.

- Pagina: <https://www.datafirefly.com/it/documentation/dfdynamicpricing/>
- Lingua: it
- Aggiornato il: 2026-07-01
- Altre lingue: [fr](https://www.datafirefly.com/documentation/dfdynamicpricing/index.md), [en](https://www.datafirefly.com/en/documentation/dfdynamicpricing/index.md), [es](https://www.datafirefly.com/es/documentation/dfdynamicpricing/index.md), [de](https://www.datafirefly.com/de/documentation/dfdynamicpricing/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfdynamicpricing/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfdynamicpricing/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfdynamicpricing/index.md)
- Indice: <https://www.datafirefly.com/it/documentation/llms.txt>

Benvenuto nella documentazione completa di **Dynamic Pricing Engine**, il motore di tariffazione dinamica per WooCommerce di DataFirefly. Questa guida copre installazione, configurazione iniziale, ogni tipo di regola, segmentazione cliente, scraping concorrenza, A/B testing, log, protezioni e disinstallazione.

**Requisiti:** WordPress 6.0+, WooCommerce 8.0+, PHP 7.4+. Compatibile HPOS e blocchi Checkout.

## Installazione

### Caricamento del plugin

1. Dal back-office WordPress, vai su **Plugin → Aggiungi nuovo → Carica plugin**.
2. Seleziona il file `dfdynamicpricing.zip` e fai clic su _Installa ora_.
3. Una volta completata l'installazione, fai clic su _Attiva plugin_.

### Cosa succede all'attivazione

Il plugin crea 6 tabelle personalizzate (con prefisso `wp_dfdpe_`):

- `wp_dfdpe_rules` — le regole di prezzo
- `wp_dfdpe_logs` — il log degli aggiustamenti
- `wp_dfdpe_segments` — i segmenti cliente (3 pre-caricati automaticamente)
- `wp_dfdpe_competitors` — il monitoraggio concorrenza
- `wp_dfdpe_ab_tests` — i test A/B
- `wp_dfdpe_ab_events` — gli eventi di esposizione, ATC e conversione

Vengono anche pianificate due attività cron: lo scraping concorrenza (orario per impostazione predefinita) e la purga del log (giornaliera).

### Menu di amministrazione

Un nuovo menu **Dynamic Pricing** appare nella barra laterale con 7 sottomenu: Dashboard, Regole, Segmenti, Concorrenti, A/B Testing, Log, Impostazioni. Tutte le azioni richiedono la capacità WordPress `manage_woocommerce`.

## Configurazione iniziale (Impostazioni)

Prima di creare la tua prima regola, fai un giro veloce in **Dynamic Pricing → Impostazioni** per regolare i parametri globali.

### Log

- **Attiva log**: attivato per impostazione predefinita. Ogni aggiustamento viene registrato con prodotto, regola, cliente, contesto.
- **Ritenzione (giorni)**: 60 giorni per impostazione predefinita. La purga automatica gira ogni giorno.

Il log è rate-limited a 1 voce per sessione, prodotto e ora per evitare il flooding. Puoi disattivarlo completamente se non lo usi.

### Protezioni globali

- **Prezzo pavimento (% del prezzo originale)**: ad esempio, 70 = non scendere mai sotto il 70 % del prezzo originale. 0 = disattivato.
- **Prezzo tetto (% del prezzo originale)**: ad esempio, 130 = non superare mai il 130 %. 0 = disattivato.
- **Non vendere mai sotto il costo d'acquisto**: attivare se memorizzi il costo in un meta prodotto.
- **Chiave meta del costo d'acquisto**: `_cost` per impostazione predefinita (compatibile con WooCommerce Cost of Goods).

### Scraper concorrenti

- **Frequenza di esecuzione**: oraria, due volte al giorno o giornaliera. Lo scraper elabora 25 URL per batch.

### Visualizzazione front-office

- **Mostra prezzo originale barrato**: utile per un effetto promo visibile. Da disattivare per test A/B confidenziali.

## Crea la tua prima regola

Vai su **Dynamic Pricing → Regole → Aggiungi**. Ogni regola ha gli stessi campi base, qualunque sia il suo tipo.

### Campi comuni

- **Nome**: etichetta interna, utile nel log (es.: «Happy hour 18-20»).
- **Tipo**: Orario, Stock, Segmento cliente o Concorrente.
- **Stato**: Attiva o Inattiva. Una regola inattiva non viene mai valutata.
- **Priorità**: le regole vengono eseguite in ordine crescente di priorità. Ogni regola lavora sul risultato della precedente.
- **Portata**: Globale, Categoria, Etichetta o Prodotto specifico.
- **Aggiustamento**: Percentuale, Importo fisso, Valore definito o Match concorrente (solo con tipo Concorrente).
- **Pavimento / Tetto**: protezioni opzionali a livello di regola.
- **Finestra di date**: date di inizio e fine per rendere la regola attiva solo durante un periodo dato.
- **Test A/B**: collegamento opzionale a un test A/B e alla sua variante (vedi sezione A/B Testing).

**Consiglio di priorità:** inizia dalle regole più ampie (globali) con priorità bassa, poi affina con regole mirate a priorità più alta. Le protezioni globali configurate in Impostazioni si applicano sempre per ultime.

## Tipo 1 — Regola per orario

Aggiusta il prezzo in base all'orario e al giorno della settimana. Ideale per l'effetto happy hour, le promo del weekend o le tariffe notturne.

### Condizioni disponibili

- **Giorni della settimana**: seleziona uno o più giorni (lunedì-domenica, formato ISO).
- **Ora di inizio / Ora di fine**: formato 24h. Gli intervalli che attraversano la mezzanotte sono gestiti automaticamente (es.: 22-02).
- **Fuso orario**: _sito_ (predefinito, usa il fuso orario WordPress) o un fuso specifico (es.: `Europe/Rome`).

### Esempi concreti

- **Happy hour**: −15 %, giovedì-venerdì, 18-20, fuso Europe/Rome.
- **Promo weekend**: −10 %, sabato-domenica, 00-23:59.
- **Prezzo notturno**: +5 %, ogni giorno, 22-06 (attraversa la mezzanotte, gestito automaticamente).

## Tipo 2 — Regola per stock

Aggiusta il prezzo in base al livello di stock del prodotto. Utile per smaltire rapidamente prodotti in eccesso o valorizzare quelli che stanno diventando rari.

### Condizioni disponibili

- **Operatore**: .
- **Soglia**: numero intero.
- **Modalità**: _Assoluta_ (numero di unità) o _Percentuale dello stock iniziale_ (richiede il meta `_initial_stock` definito sul prodotto).

### Esempi concreti

- **Svendita**: stock >= 50 (eccesso) → −20 %.
- **Rarità**: stock < 5 → +10 %.
- **Percentuale dello stock iniziale**: modalità percentuale, stock < 20 % dello stock iniziale → −5 %.

Per usare la modalità Percentuale, aggiungi un campo meta `_initial_stock` ai tuoi prodotti (via WP All Import, ACF o un semplice `update_post_meta`). Senza questo meta, la modalità percentuale viene ignorata.

## Tipo 3 — Regola per segmento cliente

Applica un aggiustamento solo ai clienti che appartengono a uno o più segmenti definiti.

### Condizioni disponibili

- **Segmenti**: uno o più segmenti esistenti (vedi sezione Segmenti).
- **Corrispondenza**: _Any_ (il cliente appartiene ad almeno un segmento) o _All_ (appartiene a tutti).

### Esempi concreti

- **Fedeltà**: segmento _loyal-customers_, aggiustamento −10 %.
- **Riconquista**: segmento _dormant_ (da creare), aggiustamento −20 % per 7 giorni.
- **B2B**: segmento _b2b_ (ruolo `wholesale`), aggiustamento −25 %.

## Tipo 4 — Regola per prezzo concorrente

Allinea il tuo prezzo a quello di un concorrente configurato nella sezione Concorrenti. Tre strategie disponibili.

### Strategie

- **Match**: il tuo prezzo diventa esattamente il prezzo del concorrente.
- **Undercut**: il tuo prezzo scende sotto quello del concorrente, in percentuale o importo fisso.
- **Overprice**: il tuo prezzo sale sopra il concorrente (posizionamento premium).

### Condizioni disponibili

- **Modalità**: _Percentuale_ o _Importo fisso_.
- **Importo**: percentuale (es.: 5 per 5 %) o importo nella valuta.
- **Età massima dei dati (ore)**: oltre, i dati di scraping sono considerati troppo vecchi e la regola passa al comportamento di fallback.
- **Fallback**: comportamento se i dati concorrente non sono disponibili (ad esempio, applicare un aggiustamento neutro o saltare la regola).

### Esempio concreto

Undercut del 3 % del concorrente A, con età massima di 6 ore. Se il concorrente A non è stato scrappato da 6 ore, la regola viene ignorata e il prezzo rimane invariato.

## Segmenti cliente

Un segmento è una combinazione di criteri che definisce un gruppo di clienti. Una volta creato, un segmento può essere mirato da una regola di tipo _Segmento cliente_.

### Segmenti pre-caricati all'attivazione

- **new-customers**: clienti con 0 o 1 ordine.
- **loyal-customers**: clienti con 5 ordini o più.
- **vip**: clienti che hanno speso almeno 500 €.

### Creare un segmento

Da **Dynamic Pricing → Segmenti → Aggiungi**, definisci:

- **Nome** e **Slug** (auto-generato se vuoto).
- **Descrizione** (opzionale, per il tuo team).
- **Criteri**: aggiungi tante righe quante necessario. Tutti i criteri devono essere soddisfatti (logica AND).
- **Stato**: attivo o inattivo.

### Campi disponibili per i criteri

- `order_count` — numero di ordini del cliente.
- `total_spent` — totale speso (nella valuta del sito).
- `is_guest` — 1 se il visitatore non è connesso, 0 altrimenti.
- `user_roles` — ruoli WordPress del cliente (es.: `customer`, `subscriber`, `wholesale`).
- `days_since_last_order` — giorni dall'ultimo ordine.

### Operatori disponibili

Dieci operatori: `==`, `!=`, `>`, `>=`, `= 60`. Mira ai vecchi clienti che non ordinano da 2 mesi.

## Concorrenti (scraping)

Lo scraper recupera automaticamente il prezzo mostrato su una pagina prodotto di un concorrente, secondo una frequenza configurabile. I prezzi recuperati vengono poi usati dalle regole di tipo _Concorrente_.

### Aggiungere un concorrente

Da **Dynamic Pricing → Concorrenti → Aggiungi**:

1. **Prodotto WooCommerce (ID)**: l'ID del prodotto locale a cui collegare il monitoraggio.
2. **Nome del concorrente**: etichetta libera (es.: «Amazon», «ePrice»).
3. **URL**: la pagina prodotto del concorrente da scrappare.
4. **Tipo di selettore**: CSS, XPath, Regex o JSON-LD.
5. **Selettore**: il selettore che punta al prezzo (vedi esempi sotto).
6. **Valuta**: per impostazione predefinita la valuta WooCommerce del sito.
7. **Stato**: monitoraggio attivo o in pausa.

### Tipi di selettori

- **CSS**: selettore CSS classico. Esempi: `.price .amount`, `#product-price`, `span[itemprop=price]`.
- **XPath**: espressione XPath. Esempio: `//span[@class="price"]`.
- **Regex**: espressione regolare PHP. Esempio: `/€s*([d,.]+)/` — si usa il primo gruppo catturato.
- **JSON-LD**: auto-rilevamento Schema.org. Cerca `price`, `offers.price`, `offers.lowPrice` nei tag JSON-LD. Lascia il campo Selettore vuoto.

### Parsing dei prezzi

Lo scraper gestisce i formati europei (`1 299,90`) e americani (`1,299.90`) automaticamente. Simboli di valuta e spazi vengono puliti.

### Esecuzione manuale

Il pulsante **Scrapa ora** accanto a ogni concorrente forza un aggiornamento immediato in AJAX. Utile per testare un nuovo selettore.

### Stati possibili

- **pending** — mai scrappato, in attesa del prossimo cron.
- **ok** — ultima esecuzione riuscita.
- **error** — ultima esecuzione fallita (messaggio memorizzato nel campo _last_error_).

**Rispetto dei T&C dei concorrenti:** lo scraper effettua una semplice richiesta HTTP con timeout breve, ma sta a te verificare che lo scraping sia autorizzato dai Termini e Condizioni dei siti target. Alcune giurisdizioni regolano questa pratica.

## A/B Testing

Il modulo A/B integrato consente di confrontare più strategie di prezzo sullo stesso prodotto e misurare il loro impatto in tempo reale (esposizioni, aggiunte al carrello, conversioni, RPV).

### Creare un test

Da **Dynamic Pricing → A/B Testing → Nuovo test**:

1. **Nome** e **slug**.
2. **Varianti**: elenco di etichette separate da virgole. Predefinito `A,B`.
3. **Ripartizione del traffico**: peso relativo per variante (normalizzato automaticamente). Ad esempio `50/50`, `70/30` o `1/1/1` per tre varianti equamente distribuite.
4. **Stato**: Bozza, In corso, In pausa o Completato. Solo un test _In corso_ assegna visitatori.
5. **Finestra**: date opzionali di inizio e fine.

### Collegare una regola a una variante

Nel form di una regola, seleziona il test A/B e la variante target. La regola si applicherà solo ai visitatori assegnati a quella variante specifica.

### Come funziona l'assegnazione

Alla prima esposizione, il plugin assegna il visitatore a una variante secondo i pesi configurati, poi memorizza questa scelta in un cookie `dfdpe_ab`. Un cookie di sessione separato `dfdpe_sid` consente di seguire lo stesso visitatore su tutta la sua sessione, connesso o meno.

### Eventi tracciati

- **exposure** — prima volta che il visitatore vede un prezzo influenzato dal test.
- **atc** — aggiunta al carrello (hook `woocommerce_add_to_cart`).
- **conversion** — ordine finalizzato (hook `woocommerce_thankyou`). L'importo totale dell'ordine viene registrato.

### Metriche calcolate (pagina Risultati)

- **Esposizioni** e **Sessioni uniche**.
- **CR ATC** — tasso di aggiunta al carrello (ATC / esposizioni).
- **CR Conv.** — tasso di conversione (conversioni / esposizioni).
- **Ricavo** — totale delle conversioni.
- **RPV** — ricavo per visitatore (ricavo / esposizioni). È la metrica chiave di decisione: la variante con il RPV più alto viene evidenziata automaticamente (badge _Vincitore_).

**Buona pratica:** lascia girare un test almeno 2 settimane prima di concludere. Un test A/B affidabile richiede diverse migliaia di esposizioni per raggiungere la significatività statistica.

## Log degli aggiustamenti

Ogni aggiustamento di prezzo applicato al front-office può essere loggato. Il log è accessibile via **Dynamic Pricing → Log**.

### Informazioni registrate

- Data e ora.
- Prodotto e variazione.
- Regola attivata (ID).
- Cliente (ID) o sessione anonima.
- Prezzo originale, prezzo finale, importo dell'aggiustamento.
- Test A/B e variante (se applicabile).
- Contesto: `frontend`, `cart`, `checkout`.

### Filtri disponibili

Puoi filtrare per ID prodotto, ID regola o ID test A/B. La paginazione mostra 50 voci per pagina.

### Rate-limiting

Per evitare il flooding, il plugin limita la registrazione a 1 voce per sessione, prodotto e ora. Una sessione che consulta 100 volte la stessa scheda prodotto in un'ora genera solo una riga.

### Purga automatica

Un'attività cron giornaliera (`dfdpe_cron_purge_logs`) elimina le voci più vecchie della ritenzione configurata (60 giorni per impostazione predefinita).

## Protezioni: come funzionano

Tre livelli di protezione successivi impediscono al tuo prezzo finale di raggiungere un livello pericoloso.

### Livello 1 — Protezioni per regola

Ogni regola può definire il proprio pavimento e tetto. Si applicano immediatamente dopo l'aggiustamento di quella regola. Utile per limitare gli effetti di una regola specifica (es.: «l'happy hour non può mai scendere sotto i 30 €, qualunque sia il prezzo originale»).

### Livello 2 — Protezioni globali

Definite in Impostazioni, come percentuale del prezzo originale:

- **Prezzo pavimento**: il prezzo finale non può scendere sotto questa percentuale.
- **Prezzo tetto**: il prezzo finale non può superare questa percentuale.

Esempio: pavimento al 70 % e tetto al 130 %. Un prodotto a 100 € non potrà mai scendere sotto 70 € né superare 130 €, qualunque siano le regole applicate.

### Livello 3 — Protezione costo d'acquisto

Se attivata in Impostazioni, questa protezione impedisce al prezzo finale di scendere sotto il valore del meta `_cost` (o della chiave personalizzata che configuri). È la garanzia ultima per non vendere mai in perdita.

I tre livelli sono cumulativi e si applicano in questo ordine: regola → globale → costo. Il prezzo finale è sempre il risultato più «protetto» dei tre.

## Compatibilità HPOS e cache

### HPOS (High-Performance Order Storage)

Il plugin dichiara la compatibilità con `custom_order_tables` e `cart_checkout_blocks` fin dall'inizializzazione. Nessuna azione aggiuntiva è richiesta se hai attivato HPOS in WooCommerce.

### Cache dei prezzi di variazione

WooCommerce mette in cache i prezzi minimo e massimo dei prodotti variabili tramite un hash. Il plugin inietta un seed dinamico (utente + sessione + bucket di 5 minuti) in questo hash tramite il filtro `woocommerce_get_variation_prices_hash`, il che forza WooCommerce a ricalcolare i prezzi al momento giusto senza rompere la cache per gli altri visitatori.

## FAQ

### Posso combinare più regole sullo stesso prodotto?

Sì. Le regole vengono eseguite in ordine di priorità, ognuna lavorando sul risultato della precedente. Puoi concatenare «−10 % VIP» e poi «tetto al 130 % del costo».

### Le regole si applicano anche al carrello e al checkout?

Sì. Un hook su `woocommerce_before_calculate_totals` ricalcola i prezzi delle righe del carrello a ogni visualizzazione.

### Il plugin è compatibile con le cache server (Redis, Varnish)?

Sì, ma se la tua cache è molto aggressiva a livello di pagina completa, i prezzi mostrati possono essere quelli in cache. Per una visualizzazione dinamica affidabile, escludi le pagine prodotto dalla cache full-page, o usa frammenti ESI.

### Posso disattivare il plugin senza perdere le mie regole?

Sì. La disattivazione non elimina alcun dato. Solo la disinstallazione via _Plugin → Elimina_ attiva lo script `uninstall.php`.

### Come esporto i miei dati?

Tutti i dati sono memorizzati nelle 6 tabelle `wp_dfdpe_*`. Puoi esportarle via phpMyAdmin, WP-CLI (`wp db export`) o qualsiasi strumento di backup WordPress.

## Disinstallazione

Per disinstallare completamente:

1. Disattiva il plugin da **Plugin**.
2. Fai clic su _Elimina_.

Lo script `uninstall.php` rimuove quindi:

- Le 6 tabelle `wp_dfdpe_*`.
- Le 9 opzioni WordPress create.
- Le attività cron pianificate.

La disinstallazione è definitiva e non reversibile. Fai un backup delle tue regole, segmenti e log prima se vuoi poter tornare indietro.

## Supporto

La tua licenza include 12 mesi di supporto e aggiornamenti. Per qualsiasi domanda, contattaci via [datafirefly.com/contact](https://www.datafirefly.com/contact/).
