"1.247 venduti." Due parole e un numero, appena sotto il prezzo — e per un acquirente che non ha mai sentito parlare del tuo negozio risponde all'unica domanda che conta davvero: qualcun altro si è fidato abbastanza da pagare? Un contatore del totale venduto prende un dato che il tuo database conosce già e lo mette nel punto in cui si decide l'acquisto. Questo articolo parla proprio di quel numero: il conteggio cumulativo, da sempre, delle unità vendute, mostrato come badge statico nella pagina prodotto. Non il ticker live "12 persone stanno guardando ora", non il popup "qualcuno a Monaco ha appena comprato questo prodotto" — quelli sono segnali diversi, con funzioni diverse, e li colleghiamo più sotto. Il contatore storico ha un solo compito: trasformare la tua cronologia vendite in prova.
Ultimo aggiornamento: giugno 2026.
Cosa significa davvero "totale prodotti venduti" in PrestaShop — e dove si trova il numero

Prima di mostrare un conteggio delle vendite, devi sapere quale numero stai mostrando, perché PrestaShop ne memorizza diversi che sembrano simili ma hanno significati diversi. Sbagliarlo è l'errore di implementazione più comune che vediamo.
| Cosa vuoi ottenere | Dove si trova | Che cos'è davvero |
|---|---|---|
| Unità effettivamente vendute | ps_order_detail.product_quantity, sommato per quel prodotto su tutti gli ordini validi | Il conteggio storico corretto — ogni riga d'ordine mai acquistata. |
| Stock disponibile | ps_stock_available.quantity (e il mirror legacy ps_product.quantity) | Ciò che resta da vendere — non ciò che è stato venduto. Mostrarlo come "venduto" è sbagliato. |
| Colonna "Vendite" nelle statistiche | ps_product_sale (mantenuta dalla classe ProductSale quando gli ordini vengono convalidati) | Un aggregato in cache che PrestaShop mantiene per la dashboard dei prodotti più venduti. |
Quindi cosa significa per te? Il vero totale venduto è una somma su ps_order_detail, collegata a ps_orders per contare solo gli ordini in uno stato valido (pagato, spedito, consegnato) ed escludere carrelli abbandonati, annullati o in errore. Un contatore che include silenziosamente ordini annullati e rimborsati si sta gonfiando da solo — e il giorno in cui un cliente se ne accorge è il giorno in cui quel numero smette di costruire fiducia e comincia a costarla.
La versione corretta di quella query è questa — somma le quantità delle righe d'ordine, ma solo sugli ordini che PrestaShop ha contrassegnato come validi:
SELECT SUM(od.product_quantity) AS units_sold
FROM ps_order_detail od
JOIN ps_orders o ON o.id_order = od.id_order
WHERE od.product_id = :id_product
AND o.valid = 1;
Il flag o.valid è il filtro decisivo: PrestaShop lo imposta a 1 solo quando un ordine raggiunge uno stato che il commerciante ha segnato come "logable" (pagato, spedito, consegnato), quindi collegarsi a quel dato è ciò che esclude gli ordini abbandonati, annullati e in errore. Eseguirlo però con un GROUP BY su ogni pagina prodotto diventa proprio il problema di performance da cui questo articolo mette in guardia — ed è il motivo per cui esiste la tabella in cache descritta sotto.
PrestaShop offre già una scorciatoia più pulita: la tabella ps_product_sale, mantenuta aggiornata dalla classe ProductSale di PrestaShop ogni volta che un ordine viene convalidato (gli stessi dati dietro Statistiche → Prodotti più venduti nel pannello di amministrazione). Leggere lì la colonna quantity in cache è molto più leggero che sommare i dettagli ordine a ogni caricamento pagina — e conta, perché la pagina prodotto è uno degli URL più visitati del tuo negozio e non vuoi eseguire un pesante GROUP BY per ogni visitatore.
Perché un contatore dei venduti funziona — e dove sta il limite
La riprova sociale funziona perché le persone guardano cosa fanno gli altri quando devono decidere in condizioni di incertezza. In un negozio fisico puoi vedere altri clienti che prendono in mano i prodotti; online, quel segnale scompare se non lo reintroduci. Un contatore dei venduti è il modo più quantitativo per farlo — un singolo numero che dice "altre persone hanno già percorso questa strada". Tende a essere più efficace sugli acquisti ragionati di fascia media: abbastanza costosi da richiedere rassicurazione, abbastanza accessibili da non spingere l'acquirente a leggere una dozzina di recensioni prima. Sui prodotti da impulso il cliente si ferma appena; sui prodotti ad alto prezzo farà comunque ricerche, con o senza badge.
Il confine onesto è questo: un contatore dei venduti è un segnale dentro un insieme più ampio, non un numero magico. Convalida la popolarità, ma non dice nulla sul fatto che il prodotto sia valido — quello è il ruolo delle recensioni prodotto, che portano un peso qualitativo che un conteggio grezzo non può avere. I due elementi si completano: "238 venduti · 4,7 stelle · 41 recensioni" è molto più forte di ciascuno preso da solo, perché risponde sia a "è popolare?" sia a "chi l'ha comprato è rimasto soddisfatto?" Se il tuo negozio si affida a widget di recensioni di terze parti, vale la pena capire perché da soli non bastano per il segnale di fiducia che un contatore dei venduti può rafforzare.
Quando il numero ti aiuta — e quando conviene nasconderlo
Il punto che molte guide saltano è questo: un contatore dei venduti non è sempre positivo. Lo stesso badge che converte su un prodotto può danneggiarne attivamente un altro. Un contatore intelligente su quando mostrarsi vale più di uno che stampa alla cieca qualunque dato ci sia nel database.
- Mostralo solo dopo una soglia minima. "2 venduti" suona peggio di nessun contatore — sussurra "nessuno lo vuole". Imposta un minimo (di solito facciamo partire i commercianti intorno a 25–50 unità) e nascondi il badge sotto quella soglia. Un prodotto si guadagna il suo contatore; non nasce con il contatore addosso.
- Negozio nuovo, nessuna recensione? È qui che il contatore si rende utile. Con zero recensioni e nessuna riconoscibilità del marchio, anche "47 venduti" dice a un visitatore alla prima visita che persone reali hanno acquistato e presumibilmente ricevuto i loro ordini. È la prova che il negozio funziona, non solo il prodotto.
- Catalogo competitivo? Quando un acquirente confronta lo stesso articolo in tre schede, la pagina che mostra "3.400 venduti" ha un vantaggio sulle due che non mostrano nulla — il conteggio diventa il criterio di spareggio che il cliente non sapeva di cercare.
- Posizionamento di lusso o esclusività? Disattivalo. Se il racconto del marchio è "edizione limitata, fatto a mano, ne esistono pochi", un conteggio a cinque cifre lo contraddice frontalmente. Non puoi essere esclusivo e di massa nella stessa pagina.
- Prodotti digitali e temi? Fai attenzione. Un conteggio alto può essere letto come "ce l'hanno già tutti", che per risorse grafiche pensate per rendere un negozio distintivo diventa un'obiezione all'acquisto, non una rassicurazione.
Come presentare il numero perché sembri onesto
La stessa identica cronologia vendite può costruire fiducia o generare sospetto a seconda di come la formatti. Alcune regole reggono bene su negozi diversi:
- Arrotonda i numeri grandi, mantieni esatti quelli piccoli. "247 venduti" è credibile perché è specifico; "12.847 venduti" sembra sospettosamente preciso e fa pensare "se lo sono inventato?" Oltre qualche migliaio, "12K+ venduti" o "10.000+ venduti" suona più onesto, non meno.
- Valuta una finestra temporale. "124 venduti questo mese" segnala una domanda attuale, più persuasiva di "5.000 venduti" accumulati in silenzio in quattro anni. Una finestra recente aiuta anche i prodotti più datati, il cui totale storico è modesto ma il cui slancio attuale è reale. In termini PrestaShop significa una somma con limite di data su ps_order_detail collegata alla data dell'ordine — più pesante della tabella in cache, quindi il risultato va messo in cache.
- Mettilo nella zona decisionale. Il contatore deve stare accanto al prezzo e al pulsante Aggiungi al carrello, dove il cliente sta davvero decidendo — non sepolto in fondo alla pagina o nascosto in una scheda. Nel template prodotto quella è l'area degli hook displayProductActions / displayProductPriceBlock; un contatore renderizzato in basso in displayFooterProduct spreca gran parte della sua forza psicologica. (Per capire dove dovrebbe stare ogni elemento della pagina e perché, vedi l'anatomia della pagina prodotto.)
Il contatore storico contro il ticker in tempo reale — non confonderli
Questa è la distinzione che decide quale strumento ti serve davvero. Un contatore del totale venduto è un dato stabile e cumulativo — cambia lentamente, si può mettere in cache senza problemi e il suo messaggio è "molte persone, nel tempo, hanno scelto questo prodotto". È il tema di questo articolo. È qualcosa di diverso dai segnali in tempo reale della stessa famiglia:
- Vendite in tempo reale e statistiche di visualizzazione — "9 persone l'hanno acquistato oggi / 23 lo stanno guardando ora" — riguardano slancio e contemporaneità, e vengono ricalcolate di continuo. È una scelta separata, trattata in come mostrare vendite e visualizzazioni in tempo reale.
- Popup di acquisti recenti — la notifica che scorre e dice "Anna a Cracovia ha appena ordinato questo prodotto" — sono notifiche di vendita in tempo reale e popup di vendita, che creano immediatezza invece di peso accumulato.
Qual è quindi la conclusione pratica? Il contatore storico e il ticker in tempo reale rispondono a obiezioni diverse. "È una scelta sicura?" trova risposta nel volume accumulato; "sta succedendo adesso?" trova risposta nei dati in tempo reale. Molti negozi usano entrambi — ma scegli il contatore statico quando vuoi una rassicurazione discreta e duratura, che non dipenda da un momento di traffico intenso per sembrare convincente.
Come inserirlo in una pagina prodotto PrestaShop
PrestaShop non ha un badge nativo "totale venduto" sul lato pubblico, quindi quel numero va aggiunto. Ci sono tre strade, in ordine crescente di impegno:
| Strada | Impegno | Resiste agli aggiornamenti? | Ideale quando… |
|---|---|---|---|
| Modifica del template — leggere il dato vendite in un override del tema child di product.tpl | Medio (serve uno sviluppatore) | Fragile — le modifiche al tema possono rompersi con un aggiornamento e non gestiscono soglie o formattazione | Hai esigenze una tantum e tempo di sviluppo interno. |
| Un modulo basato su hook — mostra il contatore tramite un hook di visualizzazione, senza interventi invasivi sul tema | Basso — installazione e configurazione dal pannello di amministrazione | Sì — nessun file del core o del tema viene duplicato e mantenuto separatamente | Vuoi soglie, formattazione e cache già gestite, e vuoi che il badge sopravviva al prossimo aggiornamento 1.7 → 8 → 9. |
| Sviluppo personalizzato | Alto | Dipende da come viene costruito | Hai logiche molto specifiche (regole per categoria, varianti A/B) e uno sviluppatore che se ne occupi. |
La strada del modulo esiste proprio perché i requisiti che rendono sicuro un contatore dei venduti — escludere gli ordini annullati, nascondere i conteggi bassi, arrotondare quelli grandi, leggere la tabella in cache ps_product_sale invece di sommare i dettagli ordine a ogni caricamento — sono macchinosi da implementare a mano e facili da sbagliare. Un modulo costruito per questo si aggancia alla pagina prodotto con una singola installazione, tiene la query pesante fuori dal percorso critico e si configura interamente dal tuo pannello di amministrazione, invece che tramite una fattura dello sviluppatore. Se un contatore fa parte di un piano più ampio per aumentare le conversioni delle pagine prodotto, la nostra guida a design e conversione della pagina prodotto mostra come si integra con gli altri elementi.
Una nota sulle performance — perché è qui che i contatori fatti in casa sbagliano
La versione ingenua di un contatore dei venduti esegue un SELECT SUM(product_quantity) … GROUP BY su ps_order_detail a ogni singola visualizzazione della pagina prodotto. Su un negozio con uno storico ordini profondo e un traffico discreto, è un rallentamento autoinflitto sulla pagina più importante. Due difese, in ordine di preferenza: leggere la tabella preaggregata ps_product_sale (PrestaShop la mantiene già tramite la classe ProductSale quando gli ordini vengono convalidati, quindi il costo viene pagato una volta in background, non per ogni visitatore); e, se devi calcolare una finestra personalizzata, mettere in cache il risultato per prodotto con un TTL sensato, così il database viene interrogato ogni tanto, non continuamente. Un contatore che peggiora il tempo di caricamento della pagina fa l'opposto di aiutarti a vendere — le pagine lente perdono proprio i clienti che il badge doveva rassicurare.
Dove si colloca il contatore dei venduti nel tuo insieme più ampio di riprova sociale
Un contatore dei venduti è una tessera in un quadro di fiducia più grande, e lavora meglio quando le tessere intorno spingono nella stessa direzione. Il conteggio quantitativo si abbina naturalmente ai segnali qualitativi: valutazioni a stelle e recensioni rispondono a "chi ha comprato è rimasto soddisfatto?"; i badge di fiducia rispondono a "il pagamento è sicuro?"; e i segnali in tempo reale — vendite e visualizzazioni o un popup di acquisto recente — rispondono a "sta succedendo adesso?" Il contributo specifico del contatore storico è un peso duraturo e accumulato: la prova che il percorso su cui stai invitando un acquirente esitante è già stato fatto, migliaia di volte, da persone che hanno pagato e sono tornate con nient'altro in mano se non il prodotto che volevano.
Individua il numero giusto alla fonte (vendite reali, solo ordini validi), mostralo solo quando valorizza il prodotto, formattalo in modo che sembri onesto, posizionalo dove avviene la decisione e tieni la query fuori dal percorso critico di caricamento pagina. Così un dato che il tuo database registra in silenzio dal primo ordine comincia a fare il suo lavoro proprio nel momento in cui un cliente decide se fidarsi di te.
FAQ
Quale numero di PrestaShop è il vero dato delle "unità vendute"?
È la somma di product_quantity in ps_order_detail sugli ordini validi — non il dato dello stock. Lo stock disponibile si trova in ps_stock_available.quantity e indica cosa resta da vendere, cioè l'opposto di ciò che è stato venduto; mostrarlo come "venduto" è l'errore più comune. PrestaShop mantiene anche un aggregato in cache in ps_product_sale, aggiornato dalla sua classe ProductSale quando gli ordini vengono convalidati, ed è il numero più leggero da leggere su una pagina prodotto molto visitata.
Il contatore dei venduti include ordini annullati o rimborsati?
Non dovrebbe, ed è proprio questo il senso dell'unione su o.valid = 1. Senza quel filtro conteresti come vendite anche carrelli abbandonati e ordini annullati, gonfiando il badge. Un contatore gonfiato non si limita a esagerare — nel momento in cui un cliente percepisce che il numero è inventato, passa da segnale di fiducia a motivo per dubitare di tutto il resto della pagina.
Un contatore dei venduti non rallenterà le mie pagine prodotto?
Sì, se lo calcoli nel modo ingenuo — un SUM ... GROUP BY sullo storico ordini a ogni singola visualizzazione pagina, su quello che è già uno degli URL più trafficati. Due difese, in ordine: leggere la tabella preaggregata ps_product_sale che PrestaShop mantiene già in background oppure, se ti serve un dato su una finestra temporale personalizzata, calcolarlo una volta e mettere in cache il risultato per prodotto con un TTL sensato, così il database viene interrogato occasionalmente invece che a ogni visita.
Ogni prodotto dovrebbe mostrare il suo conteggio vendite?
No — un contatore è una risorsa solo sopra una certa soglia. "2 venduti" suona peggio di nessun badge, quindi imposta un minimo (spesso 25–50 unità) e nascondilo sotto quel valore. Disattivalo del tutto per posizionamenti di lusso o in edizione limitata, dove un conteggio alto contraddice la storia di esclusività, e usalo con cautela sui prodotti digitali, dove "ce l'hanno già tutti" può essere letto come un'obiezione invece che come una rassicurazione.
Meglio mostrare un totale storico o una finestra recente?
Dipende dal segnale che vuoi dare. Un totale storico ("5.000 venduti") mostra fiducia accumulata e duratura; una finestra ("124 venduti questo mese") mostra domanda attuale e può aiutare un prodotto più vecchio il cui numero complessivo è modesto ma il cui slancio attuale è reale. La finestra è più pesante da calcolare perché è una somma limitata per data invece di una lettura in cache, quindi il risultato va messo in cache. Molti negozi mostrano l'inquadramento che valorizza meglio il prodotto specifico.
Commenti
Ancora nessun commento. Sii il primo!
Sii il primo a fare una domanda o a condividere un feedback utile.
Lascia un commento
Condividi una domanda, un dettaglio di installazione o un feedback utile per un altro lettore.