
🔄 Shortcode prodotti visti di recente in WooCommerce: codice pronto e configurazione
Un visitatore entra nel negozio, sfoglia cinque prodotti, chiude la scheda e un minuto dopo si dimentica del sito. È una scena familiare per qualsiasi titolare di WooCommerce. Un blocco "visti di recente" risolve questo problema: un clic su una scheda familiare riporta il visitatore nel funnel.
WooCommerce scrive automaticamente gli ID dei prodotti visualizzati nel cookie woocommerce_recently_viewed. Questi dati sono già presenti sul server del tuo negozio, non serve un plugin di tracciamento separato. Resta solo da leggere il cookie e mostrare i prodotti. Qui sotto trovi uno shortcode già pronto che fa questo in 30 righe di PHP moderno.
💡 Panoramica rapida:
- Capire come WooCommerce memorizza le visualizzazioni in un cookie, un breve paragrafo di teoria
- Copiare lo shortcode
[recently_viewed_products]nelfunctions.phpdi un child theme o in Code Snippets - Posizionare il blocco nella pagina del carrello, nella sidebar del prodotto o dopo una ricerca senza risultati, e riportare i visitatori nel sito
Come WooCommerce memorizza la cronologia delle visualizzazioni
Quando un visitatore apre la pagina di un prodotto, WooCommerce aggiunge silenziosamente l'ID di quel prodotto al cookie woocommerce_recently_viewed. Formato: una stringa con separatore |, ad esempio 123|456|789. La voce più vecchia è a sinistra, la più recente a destra. Il cookie è di sessione: vive fino alla chiusura del browser.
Non dobbiamo scrivere un nostro tracciamento delle visualizzazioni. WooCommerce raccoglie già i dati. Il compito dello shortcode: leggere la stringa, dividerla in ID, filtrare solo i prodotti esistenti e pubblicati, e passarli al meccanismo nativo [products].
Questo approccio produce il markup nativo di WooCommerce: griglia responsive, gestione delle giacenze e dei prezzi, pulsante "Aggiungi al carrello", tutto ciò che lo shortcode standard [products] sa fare, senza reimplementare il template di visualizzazione.
Codice già pronto: shortcode [recently_viewed_products]
Aggiungi questo codice al functions.php di un child theme o tramite il plugin Code Snippets. Registra lo shortcode [recently_viewed_products] con due parametri: per_page e columns.
1 /** 2 * Shortcode: [recently_viewed_products per_page="5" columns="4"] 3 * 4 * Displays products recently viewed via the native WooCommerce cookie. 5 * Uses the built-in [products] shortcode for rendering — no custom WP_Query. 6 */ 7 add_shortcode( 'recently_viewed_products', 'sd_recently_viewed_products' ); 8 9 function sd_recently_viewed_products( $atts ) { 10 $atts = shortcode_atts( array( 11 'per_page' => 5, 12 'columns' => 4, 13 ), $atts ); 14 15 // Read the WooCommerce cookie 16 $cookie = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) 17 ? wp_unslash( $_COOKIE['woocommerce_recently_viewed'] ) 18 : ''; 19 20 if ( empty( $cookie ) ) { 21 return '<p>' . esc_html__( 'You have not viewed any products yet.', 'textdomain' ) . '</p>'; 22 } 23 24 // Parse and sanitize product IDs 25 $viewed_ids = array_filter( array_map( 'absint', explode( '|', $cookie ) ) ); 26 27 if ( empty( $viewed_ids ) ) { 28 return ''; 29 } 30 31 // Keep only the N most recent items (oldest first in cookie, so slice from start) 32 $viewed_ids = array_slice( $viewed_ids, 0, (int) $atts['per_page'] ); 33 34 $ids_string = implode( ',', $viewed_ids ); 35 36 return '<h3>' . esc_html__( 'Recently Viewed Products', 'textdomain' ) . '</h3>' 37 . do_shortcode( 38 "[products ids=\"$ids_string\" columns=\"{$atts['columns']}\" orderby=\"post__in\"]" 39 ); 40 }
Dove inserire il codice
**Child theme **functions.php, l'opzione migliore. Il codice sopravvive agli aggiornamenti del tema padre ed è conservato nel controllo di versione insieme al resto delle personalizzazioni del sito.
Plugin Code Snippets, se non hai un child theme. Installa Code Snippets da WordPress.org dalla directory, crea un nuovo snippet, incolla il codice e attivalo. Funziona con qualsiasi tema.
Non inserire il codice nel functions.php del tema padre: lo perderesti al primo aggiornamento.
Analisi riga per riga
shortcode_atts()unisce i parametri utente con i valori predefiniti, funzione standard di WordPress per elaborare gli attributi degli shortcode. A differenza della deprecataextract(), non crea variabili da un array e non inquina lo scope.wp_unslash()rimuove gli slash di escaping dal valore del cookie, pratica standard quando si leggono superglobal in WordPress.explode('|', ...)divide la stringa123|456|789in un array di ID stringa.array_map('absint', ...)trasforma ogni ID in un intero non negativo, protezione contro dati spazzatura nel cookie.array_filter()scarta zeri e valori vuoti: i prodotti che non esistono più nel database sono esclusi a livello di ID.array_slice()lascia solo gli N prodotti visti più di recente. Il cookie scrive prima gli ID vecchi, poi quelli nuovi, quindi tagliamo dall'inizio dell'array.implode(',', ...)assembla la stringa123,456,789per il parametroidsdello shortcode nativo.do_shortcode('[products ids="..."]')lancia il meccanismo nativo di WooCommerce: miniature, titoli, prezzi, pulsante "Aggiungi al carrello", tutto nel markup standard del tema. I prodotti esauriti non vengono mostrati automaticamente.
Non serve assemblare manualmente <ul><li><a>.... Il [products] nativo sa già fare tutto questo ed è mantenuto dal team di WooCommerce.
Come usare lo shortcode: parametri ed esempi
Inserisci [recently_viewed_products] ovunque WordPress elabori shortcode: pagina, articolo, widget di testo, blocco Shortcode nell'editor.
Parametro | Predefinito | Scopo |
|---|---|---|
|
| Quanti prodotti mostrare |
|
| Numero di colonne nella griglia |
Esempi:
[recently_viewed_products per_page="3" columns="3"], riga compatta di tre prodotti per la sidebar[recently_viewed_products per_page="8" columns="4"], due righe da quattro prodotti per la pagina del carrello
Se il visitatore non ha ancora visualizzato alcun prodotto, lo shortcode mostra un messaggio neutro "Non hai ancora visualizzato alcun prodotto", che può essere sostituito con un testo personalizzato nella riga con esc_html__().
In pratica, la configurazione richiede tre minuti. Nel video qui sopra, un'analisi passo passo dell'uso degli shortcode WooCommerce e del loro posizionamento sul sito.
Dove posizionare lo shortcode: cosa funziona

Pagina del carrello, il posizionamento più efficace. Il visitatore ha già raccolto prodotti, ma prima del checkout vede un promemoria di ciò che ha guardato in precedenza. Per negozi con oltre 50 prodotti, questo recupera una porzione notevole di visualizzazioni abbandonate riportandole al carrello.
Sidebar della pagina prodotto. L'acquirente sta confrontando diversi modelli, il blocco "hai visualizzato" mantiene le alternative sotto gli occhi. Funziona particolarmente bene nei negozi di elettronica e abbigliamento, dove il confronto fa parte del processo di scelta.
Dopo una ricerca senza risultati. Il miglior ripiego: "Non hai trovato nulla, ma ecco cosa hai guardato prima." Invece di una pagina vuota, il visitatore vede prodotti familiari ed è più probabile che resti sul sito.
Aggiungi lo shortcode a un widget di testo della sidebar o tramite il blocco Shortcode nell'editor Gutenberg. Negli hook del tema (woocommerce_after_cart, woocommerce_before_shop_loop), solo se sei sicuro di modificare i template.
⁉️🤔 Domande frequenti
Lo shortcode funziona con la cache?
Lo shortcode dipende dal cookie PHP
woocommerce_recently_viewed, che viene letto lato server. Se la pagina è in cache a livello HTTP (tramite Varnish, NGINX FastCGI Cache o un plugin come WP Rocket), anche il contenuto dello shortcode sarà in cache, e un visitatore potrebbe vedere i prodotti visualizzati "da qualcun altro". Soluzione: escludere le pagine con lo shortcode dalla cache o attivare una modalità cache compatibile con WooCommerce (ESI o fragment caching).
Posso mostrare i prodotti visualizzati senza shortcode, tramite un hook?
Sì. La funzione
sd_recently_viewed_products()restituisce una stringa, può essere chiamata direttamente in qualsiasi hook del tema:echo sd_recently_viewed_products( array( 'per_page' => 4 ) );. Hook adatti sonowoocommerce_after_cart,woocommerce_after_single_productewoocommerce_before_shop_loop. Considera la cache se la pagina è interamente in cache.
Quanti prodotti sono memorizzati nel cookie?
Per impostazione predefinita, WooCommerce memorizza gli ID degli ultimi 10 prodotti visualizzati. Questo valore è definito nel codice di WooCommerce e non è configurabile da interfaccia. Lo shortcode determina tramite il parametro
per_pagequanti di quei 10 mostrare.
Perché questo approccio è migliore di un plugin separato?
Un codice di 30 righe non aggiunge query extra al database, usa lo stesso cookie che WooCommerce ha già scritto. Un plugin separato spesso introduce un proprio meccanismo di tracciamento (cookie aggiuntivi, eventi JS, tabelle del database). Per un negozio tipico, lo shortcode copre completamente lo scenario, senza appesantire l'amministrazione.
Perché usare [products], non un WP_Query personalizzato?
Il
[products]nativo fornisce la griglia responsive del tema, i prezzi, il pulsante "Aggiungi al carrello", la gestione delle giacenze e lo stato di esaurito, gratuitamente. Con unWP_Querymanuale, dovresti reimplementare tutto questo e mantenerlo attraverso gli aggiornamenti di WooCommerce.
Shortcode in 30 righe: ne vale la pena
Il cookie woocommerce_recently_viewed è un dato che il tuo negozio già raccoglie. Uno shortcode di 30 righe lo trasforma in un blocco "visti di recente" funzionante, senza plugin e query extra al database.
- Se hai un negozio con oltre 50 prodotti, posiziona lo shortcode nella pagina del carrello e prova un test A/B con un gruppo di controllo senza il blocco.
- Se usi una cache aggressiva, escludi la pagina con lo shortcode o attiva il fragment caching.
- Se il visitatore non ha visualizzato prodotti, lo shortcode mostra silenziosamente un messaggio neutro e non rompe il layout.
Aggiungi [recently_viewed_products] al tuo sito e verifica in una finestra del browser in incognito: apri un paio di prodotti, poi vai alla pagina con lo shortcode. Se il blocco non mostra ciò che hai visualizzato, controlla le impostazioni della cache, molto probabilmente è quella la causa. Che metodo usi per mostrare i prodotti visualizzati, shortcode, plugin o hook del tema? Scrivilo nei commenti.



