Salta al contenuto

Ti risponde Salvatore, di persona: niente centralini, niente ticket.

8 snippet Liquid utili per la pagina prodotto Shopify (pronti da usare)

Copertina: 8 snippet Liquid utili per la pagina prodotto Shopify, con il codice del badge di sconto

Badge di sconto, avviso “ultimi pezzi”, quanto manca alla spedizione gratuita. Sono piccole cose che aiutano il cliente a decidere, e per molte di queste si installa un’app. Spesso però bastano dieci righe di codice: uno snippet Liquid Shopify, senza script esterni e senza abbonamenti.

In breve: uno snippet è un file della cartella snippets/ del tema con un pezzo di Liquid riutilizzabile. Lo crei una volta e lo richiami dove serve con {% render 'nome' %}, passando i dati come parametri. Qui trovi otto snippet per la pagina prodotto, con il codice spiegato e i punti a cui fare attenzione.

Non ti prometto più vendite: nessuno snippet lo garantisce. Ti prometto codice pulito, che usa solo oggetti e filtri documentati da Shopify, e che non rallenta il negozio. Se Liquid è nuovo per te, tieni a portata di mano la guida pratica a Liquid.

Come usare questi snippet

Il procedimento è lo stesso per tutti e otto:

  1. duplica il tema e lavora sulla copia (se non l’hai mai fatto, ti spiego come in come modificare il codice del tema Shopify);
  2. in Modifica codice, nella cartella snippets, crea il file con il nome indicato, per esempio badge-sconto.liquid;
  3. incolla il codice e salva;
  4. richiamalo con {% render %} nel punto giusto della sezione prodotto (in Dawn è sections/main-product.liquid) oppure in un blocco “Liquid personalizzato” dall’editor, se il tuo tema lo prevede.

Uno snippet non vede le variabili di chi lo richiama: tutto quello che gli serve va passato come parametro, come spiega la pagina del tag render. Per questo negli esempi passo sempre variant o product.

I testi sono scritti in italiano dentro il codice, per renderli leggibili. In un negozio con più lingue vanno spostati nei file di traduzione e letti con il filtro t: ne parlo nelle domande frequenti.

1. Percentuale di sconto

Mostra “-20%” quando la variante ha un prezzo di confronto (il prezzo barrato) più alto del prezzo di vendita. Il calcolo lo fa Liquid, così non devi aggiornare a mano nessuna etichetta.

snippets/badge-sconto.liquid

{%- assign pieno = variant.compare_at_price -%}
{%- if pieno > variant.price -%}
  {%- assign risparmio = pieno | minus: variant.price -%}
  {%- assign perc = risparmio | times: 100.0 | divided_by: pieno | round -%}
  <span class="badge-sconto">-{{ perc }}%</span>
{%- endif -%}

Lo richiami così: {% render 'badge-sconto', variant: product.selected_or_first_available_variant %}.

Riga per riga: prendo il prezzo pieno; se è più alto del prezzo di vendita calcolo il risparmio; poi la percentuale. Il 100.0 con il punto non è un vezzo: in Liquid una divisione tra numeri interi dà un intero, e senza decimali molti sconti diventerebbero 0. Il filtro round arrotonda all’intero più vicino. Se il prodotto non ha prezzo di confronto, la condizione è falsa e non compare niente.

Snippet Liquid che calcola e mostra la percentuale di sconto di un prodotto Shopify dal prezzo di confronto
Lo snippet del badge sconto: la percentuale nasce dal prezzo di confronto.

Attenzione: il prezzo barrato deve essere un prezzo vero, praticato prima dello sconto. Lo snippet mostra quello che inserisci nell’admin: la correttezza del dato è responsabilità di chi vende.

2. Disponibilità e ultimi pezzi

Un avviso “ultimi 3 pezzi” è utile solo se è vero. Per questo lo snippet compare solo quando Shopify traccia davvero le scorte di quella variante e non permette di vendere oltre la disponibilità.

snippets/ultimi-pezzi.liquid

{%- assign soglia = soglia | default: 5 -%}
{%- if variant.inventory_management == 'shopify' and variant.inventory_policy == 'deny' -%}
  {%- assign q = variant.inventory_quantity -%}
  {%- if q > 0 and q <= soglia -%}
    <p class="ultimi-pezzi">
      {%- if q == 1 -%}
        Ultimo pezzo disponibile
      {%- else -%}
        Ultimi {{ q }} pezzi disponibili
      {%- endif -%}
    </p>
  {%- endif -%}
{%- endif -%}

Lo richiami con {% render 'ultimi-pezzi', variant: product.selected_or_first_available_variant, soglia: 3 %}. Se non passi soglia, vale 5.

I due controlli della seconda riga sono il punto chiave. Secondo la documentazione dell’oggetto variant, se le scorte non sono tracciate inventory_quantity non è la disponibilità reale; e se la variante si vende anche quando è esaurita (inventory_policy uguale a continue), un avviso “ultimi pezzi” sarebbe fuorviante. Anche Dawn, nel suo blocco delle scorte, mostra questi messaggi solo quando l’inventario è gestito da Shopify.

3. Quanto manca alla spedizione gratuita

Se offri la spedizione gratuita sopra una certa cifra, dirlo al cliente nel momento giusto è un incentivo onesto. Questo snippet va nel carrello, che è il posto dove il totale è aggiornato.

snippets/soglia-spedizione.liquid

{%- assign soglia = soglia | default: 5000 -%}
{%- if cart.item_count > 0 and cart.currency.iso_code == shop.currency -%}
  {%- assign mancano = soglia | minus: cart.total_price -%}
  {%- if mancano > 0 -%}
    <p class="soglia">Mancano {{ mancano | money }} alla spedizione gratuita.</p>
  {%- else -%}
    <p class="soglia">La spedizione per questo ordine è gratuita.</p>
  {%- endif -%}
{%- endif -%}

Lo richiami con {% render 'soglia-spedizione', soglia: 5000 %}: la soglia è in centesimi, quindi 5000 vuol dire 50,00 €. cart.total_price è il totale dopo gli sconti, sempre in centesimi, come indica la pagina dell’oggetto cart.

Snippet Liquid che mostra quanto manca alla spedizione gratuita nel carrello Shopify, con controllo della valuta
La soglia di spedizione gratuita calcolata dal totale del carrello.

Il controllo sulla valuta serve ai negozi con più mercati: il totale del carrello è nella valuta del cliente, la soglia scritta nel codice è nella valuta del negozio. Se non coincidono, lo snippet resta in silenzio invece di mostrare un calcolo sbagliato. Due verifiche prima di pubblicare: la soglia deve essere identica a quella della tariffa impostata in Impostazioni > Spedizione e consegna, e va provata con un ordine di test con uno sconto applicato.

Nel carrello a comparsa il messaggio si aggiorna solo se il tema ricarica quella parte quando aggiungi un prodotto: controllalo sul tuo tema prima di metterlo lì.

4. Prezzo per unità

Per prodotti venduti a peso o a volume (caffè, olio, detersivi) può servire il prezzo al chilo o al litro. Shopify lo gestisce già: nella scheda della variante imposti la quantità totale e l’unità di riferimento. Tutti i temi Online Store 2.0 lo mostrano vicino al prezzo, come indica la guida di Shopify sui prezzi unitari.

Lo snippet serve quando vuoi mostrarlo in un altro punto, per esempio nelle schede prodotto delle collezioni, o su un tema vecchio che non lo prevede:

snippets/prezzo-unitario.liquid

{%- if variant.unit_price_measurement -%}
  <small class="prezzo-unitario">
    {{ variant.unit_price | unit_price_with_measurement: variant.unit_price_measurement }}
  </small>
{%- endif -%}

Il filtro unit_price_with_measurement formatta prezzo e unità insieme (per esempio “12,00 €/kg”). È lo stesso filtro che usa oggi Dawn nel suo snippet del prezzo unitario.

5-8. Altri quattro snippet veloci

Etichetta “nuovo”

Mostra “Nuovo” sui prodotti pubblicati negli ultimi 30 giorni, senza dover ricordare di togliere l’etichetta a mano.

snippets/badge-nuovo.liquid

{%- assign giorni = giorni | default: 30 -%}
{%- assign adesso = 'now' | date: '%s' | plus: 0 -%}
{%- assign pubblicato = product.published_at | date: '%s' | plus: 0 -%}
{%- assign eta = adesso | minus: pubblicato | divided_by: 86400 -%}
{%- if eta < giorni -%}
  <span class="badge-nuovo">Nuovo</span>
{%- endif -%}

Trasformo le due date in secondi (date: '%s', poi plus: 0 per avere un numero), le sottraggo e divido per 86.400, i secondi di un giorno. Un limite da sapere: 'now' è il momento in cui la pagina è stata generata, e Shopify può servire per un po’ una versione già pronta. L’etichetta può quindi sparire con qualche ora di ritardo, come avverte la pagina del filtro date.

Variante esaurita

Quando il cliente sceglie una taglia o un colore esaurito, il pulsante di solito diventa grigio e basta. Una frase chiara evita il dubbio “è rotto il sito?”.

snippets/variante-esaurita.liquid

{%- unless variant.available -%}
  <p class="variante-esaurita">Questa combinazione è esaurita: prova un’altra taglia o un altro colore.</p>
{%- endunless -%}

Nei temi moderni il cambio di variante aggiorna solo alcune parti della pagina. Metti lo snippet vicino al prezzo o al pulsante, che il tema ricarica sempre, e prova a cambiare variante prima di pubblicare.

Torna alla collezione

Un link “Torna a Scarpe donna” aiuta chi arriva da una collezione a continuare a guardare, senza usare il tasto indietro.

snippets/torna-collezione.liquid

{%- if collection -%}
  {%- assign c = collection -%}
{%- else -%}
  {%- assign c = product.collections.first -%}
{%- endif -%}
{%- if c -%}
  <a class="torna-collezione" href="{{ c.url }}">Torna a {{ c.title | escape }}</a>
{%- endif -%}

Lo richiami con {% render 'torna-collezione', product: product, collection: collection %}. L’oggetto collection nella pagina prodotto esiste solo se il cliente è arrivato da un indirizzo del tipo /collections/…/products/…; altrimenti uso la prima collezione a cui appartiene il prodotto.

Testo spedizione dalle impostazioni

Una riga sotto il prezzo, tipo “Spediamo dal lunedì al venerdì”, modificabile dall’editor senza toccare il codice. Prima aggiungi un gruppo di impostazioni in fondo all’elenco di config/settings_schema.json (attenzione alla virgola prima della graffa):

config/settings_schema.json (gruppo da aggiungere)

{
  "name": "Spedizione",
  "settings": [
    {
      "type": "text",
      "id": "testo_spedizione",
      "label": "Testo sulla spedizione nella pagina prodotto",
      "info": "Lascia vuoto per non mostrarlo."
    }
  ]
}

Poi lo snippet, che stampa il testo solo se è stato compilato:

snippets/testo-spedizione.liquid

{%- if settings.testo_spedizione != blank -%}
  <p class="testo-spedizione">{{ settings.testo_spedizione | escape }}</p>
{%- endif -%}

Non calcolo una data di consegna: festivi, orari del corriere e destinazioni la rendono una promessa difficile da mantenere. Un testo scritto da te, che puoi cambiare in un minuto, è più onesto. Se il testo deve cambiare da prodotto a prodotto, la strada giusta sono i metafield di Shopify.

Prima di pubblicare: tre controlli

Ogni snippet, prima di andare online, passa questi tre controlli:

  1. Tutti i casi: prova un prodotto in sconto e uno no, uno con le scorte tracciate e uno senza, una variante esaurita, un carrello vuoto. Lo snippet deve comparire solo quando ha senso.
  2. Lingue e valute: se il negozio vende in più mercati, controlla che i testi siano tradotti e che le cifre siano nella valuta giusta, oppure che lo snippet resti nascosto.
  3. Velocità e ordine: questi snippet non caricano script esterni, ed è il loro vantaggio rispetto a molte app. Tieni comunque un elenco di cosa hai aggiunto e dove, per il prossimo aggiornamento del tema. Il resto del lavoro sulla velocità lo racconto in come velocizzare un negozio Shopify.

Questi dettagli funzionano meglio dentro una strategia: offerte chiare, spedizioni comprensibili, schede complete. Ne parlo nelle strategie di marketing per vendere di più su Shopify e in come trasformare le visite del sito in contatti e vendite.

Domande frequenti

Gli snippet funzionano con tutti i temi?

Il codice usa solo oggetti e filtri standard di Shopify, quindi funziona su qualsiasi tema. Cambia il punto in cui richiamarlo: ogni tema organizza la pagina prodotto a modo suo, e le classi CSS vanno adattate allo stile del tema. Sui temi Online Store 2.0 spesso basta un blocco Liquid personalizzato; sui temi vecchi va inserito nel file del template.

Se aggiorno il tema perdo gli snippet?

Può succedere. Quando aggiorni un tema del Theme Store, Shopify prova a riportare le modifiche, ma quelle incompatibili si perdono. I file nella cartella snippets di solito sono il problema minore; più spesso salta la riga con render dentro la sezione. Tieni un elenco di cosa hai aggiunto e dove: rimetterlo a posto richiede pochi minuti.

Meglio uno snippet o un’app?

Per cose piccole e stabili, come un badge o una frase, preferisco lo snippet: niente script in più, niente abbonamento, niente dati che escono dal negozio. L’app conviene quando serve un pannello per chi non tocca il codice, dati esterni come recensioni o tempi del corriere, o un supporto dedicato. In ogni caso conviene provarla su una copia del tema.

Come gestisco più lingue e valute?

Per le lingue, sposta i testi nei file della cartella locales e leggili con il filtro t, così si traducono con Translate & Adapt. Per le valute, money formatta già i prezzi nella valuta del cliente; le cifre fisse scritte nel codice, come una soglia, sono invece nella valuta del negozio. Per questo lo snippet della spedizione controlla la valuta prima di mostrare il messaggio.

Conclusione

Otto snippet, nessuna app: percentuale di sconto, ultimi pezzi, spedizione gratuita, prezzo unitario, etichetta nuovo, variante esaurita, ritorno alla collezione e testo sulla spedizione. Ognuno fa una cosa sola, solo quando il dato è vero.

Se preferisci non mettere le mani nel tema, li installo e li adatto io nell’assistenza e manutenzione del negozio online; per progetti più ampi c’è la realizzazione e migrazione Shopify.

Vuoi uno di questi snippet adattato al tuo tema? Scrivimi quale: te lo installo io, con una copia di sicurezza del tema. Ti rispondo io.

Scritto da

Salvatore Pitone

Sviluppatore web, realizzo siti WordPress ed e-commerce per professionisti e piccole imprese. Sul blog condivido quello che imparo ogni giorno lavorando sui siti dei miei clienti.

Richiedi un preventivo

Preventivo gratuito

Partiamo dal tuo progetto, con calma e chiarezza.

Scrivimi cosa ti serve. Ti richiamo io, ti faccio qualche domanda e ti mando un preventivo chiaro, senza sorprese e senza tecnicismi.

Salvatore Pitone, sviluppatore web, sorridente con le braccia incrociate
Ti rispondo io, Salvatore. Niente call center: leggo personalmente ogni richiesta e ti rispondo entro 24 ore lavorative.

Raccontami il tuo progetto

Ti rispondo personalmente entro 24 ore lavorative.