Salta al contenuto

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

Shopify Functions e checkout: sconti, spedizioni e pagamenti su misura dopo gli Scripts

Copertina: Shopify Functions e checkout, sconti, spedizioni e pagamenti su misura dopo gli Scripts

Se il tuo negozio usava gli Shopify Scripts per sconti, regole di spedizione o metodi di pagamento, dal 30 giugno 2026 quegli script non funzionano più. E il vecchio checkout.liquid, il file con cui si personalizzava il checkout, è già andato in pensione.

Oggi sconti, spedizioni e pagamenti su misura si fanno con le Shopify Functions: piccoli programmi che girano dentro Shopify e decidono, per esempio, quale sconto applicare o quali metodi di pagamento mostrare. L’aspetto del checkout invece si cambia con l’editor del checkout, il branding e le Checkout UI extensions.

Ti spiego le date, cosa sono le Functions in parole semplici, come si personalizza il checkout oggi, un esempio completo di sconto a scaglioni e cosa puoi fare con ogni piano.

Cosa è cambiato: Scripts e checkout.liquid

Il passaggio è durato due anni. Ecco le tappe, verificate a ottobre 2026 sul changelog di Shopify e nella documentazione su checkout.liquid.

Le date

  • 13 agosto 2024: checkout.liquid smette di funzionare per le pagine informazioni, spedizione e pagamento;
  • 28 agosto 2025: checkout.liquid e gli script aggiuntivi vengono spenti anche nelle pagine Grazie e Stato dell’ordine dei negozi Plus;
  • 15 aprile 2026: gli Shopify Scripts non si possono più modificare né pubblicare;
  • 30 giugno 2026: tutti gli Scripts smettono di essere eseguiti;
  • 26 agosto 2026: scadenza per i negozi non Plus per passare alle nuove pagine Grazie e Stato dell’ordine.

Cosa smette di funzionare

Gli Scripts ancora pubblicati sono stati disattivati: gli sconti e le regole che facevano non si applicano più. Il riquadro degli “script aggiuntivi” nelle impostazioni del checkout è in sola lettura da agosto 2025.

Se lì dentro avevi incollato codici di tracciamento (conversioni, pixel pubblicitari), vanno spostati nel nuovo sistema degli eventi cliente, di cui parlo più sotto. Le personalizzazioni grafiche fatte con checkout.liquid vanno rifatte con gli strumenti nuovi.

Shopify Functions in parole semplici

Una Function è un pezzo di codice, scritto di solito in Rust o JavaScript e compilato in WebAssembly, che Shopify esegue sui suoi server in un momento preciso del carrello o del checkout. Riceve i dati che le servono (il carrello, il cliente, le impostazioni dello sconto) e restituisce una decisione: “applica il 10%”, “nascondi questo metodo di pagamento”.

Non può chiamare server esterni (salvo casi particolari per i negozi enterprise), non usa date o numeri casuali e deve stare in limiti precisi di memoria e calcolo. Si distribuisce sempre dentro un’app. I tipi principali, dalla documentazione delle Function API:

Sconti

La Discount Function API riunisce in un’unica API gli sconti sui prodotti, sull’ordine e sulla spedizione. Su ogni negozio si possono attivare fino a 25 funzioni di sconto, che lavorano in parallelo senza sapere l’una dell’altra.

Spedizioni

La Delivery Customization nasconde, rinomina o riordina le opzioni di spedizione al checkout: per esempio togliere il corriere espresso per certe zone o per prodotti ingombranti.

Pagamenti

La Payment Customization fa lo stesso con i metodi di pagamento: nascondere il contrassegno sopra una certa cifra, o mostrare il bonifico solo ai clienti business.

Convalida del carrello

La Cart and Checkout Validation blocca il checkout con un messaggio quando una regola non è rispettata: quantità massime, combinazioni di prodotti non ammesse, ordini minimi. Ci sono poi API più specifiche, come la Cart Transform per i bundle.

Confronto tra Shopify Scripts e checkout.liquid e i sostituti di oggi: Functions ed estensioni del checkout
Cosa sostituisce gli Scripts e checkout.liquid.

Personalizzare il checkout oggi

Il checkout di Shopify non si riscrive più: si configura e si estende in punti precisi. Questo lo rende più sicuro e aggiornato da solo, ma chiede di ragionare in modo diverso.

Branding del checkout

Logo, colori e caratteri si impostano dall’editor del checkout e degli account, disponibile su tutti i piani. Lo stile avanzato tramite la Checkout Branding API è invece riservato ai negozi Plus, come riporta la tabella di Shopify sulla checkout extensibility.

Checkout UI extensions

Sono blocchi che un’app aggiunge al checkout: un messaggio, un campo in più, una casella da spuntare. Nelle pagine informazioni, spedizione e pagamento funzionano solo sul piano Plus; nelle pagine Grazie e Stato dell’ordine sono disponibili su tutti i piani.

Non tutto ciò che riguarda gli obblighi verso il cliente passa dal checkout. Il pulsante di recesso, per esempio, va messo nel negozio e nell’area cliente, dove resta raggiungibile per tutto il periodo di recesso.

Pixel e tracciamento

I codici di tracciamento non si incollano più nel checkout: si gestiscono in Impostazioni > Eventi cliente, con i pixel delle app o con pixel personalizzati che girano in un ambiente isolato. Così raccolgono gli eventi anche nel checkout, senza poter modificare la pagina.

Un esempio: sconto a scaglioni con una Function

Mettiamo che tu voglia il 10% di sconto sopra i 100 euro di carrello e il 15% sopra i 200. Le impostazioni standard degli sconti di Shopify coprono già molti casi, quindi prima controllo sempre lì. Se servono regole che non ci sono, scrivo una Function dentro un’app.

Parto dal modello ufficiale, generato con Shopify CLI dalla cartella dell’app:

terminale

shopify app generate extension --template discount --flavor vanilla-js --name sconto-scaglioni

La CLI crea la cartella extensions/sconto-scaglioni/. Il file di configurazione dice a Shopify in quale momento eseguire la funzione (il “target”) e con quali dati. Il modello include anche la parte per gli sconti sulla spedizione: se non serve, la tolgo, e resta questo:

extensions/sconto-scaglioni/shopify.extension.toml

api_version = "2026-07"

[[extensions]]
name = "Sconto a scaglioni"
handle = "sconto-scaglioni"
type = "function"

  [[extensions.targeting]]
  target = "cart.lines.discounts.generate.run"
  input_query = "src/cart_lines_discounts_generate_run.graphql"
  export = "cart-lines-discounts-generate-run"

  [extensions.build]
  command = ""
  path = "dist/function.wasm"

La versione dell’API (2026-07) è quella che scrive il modello della CLI al momento in cui scrivo. La funzione riceve solo i dati chiesti nella query di input: qui il subtotale del carrello e le classi di sconto attive.

extensions/sconto-scaglioni/src/cart_lines_discounts_generate_run.graphql

query CartInput {
  cart {
    cost {
      subtotalAmount {
        amount
      }
    }
  }
  discount {
    discountClasses
  }
}

E questa è la funzione vera e propria. Cerca lo scaglione più alto raggiunto e restituisce uno sconto percentuale sul subtotale dell’ordine:

extensions/sconto-scaglioni/src/cart_lines_discounts_generate_run.js

import {
  DiscountClass,
  OrderDiscountSelectionStrategy,
} from '../generated/api';

// Scaglioni dal più alto al più basso: soglia sul subtotale e percentuale
const TIERS = [
  { threshold: 200, percentage: 15 },
  { threshold: 100, percentage: 10 },
];

export function cartLinesDiscountsGenerateRun(input) {
  if (!input.discount.discountClasses.includes(DiscountClass.Order)) {
    return { operations: [] };
  }

  const subtotal = parseFloat(input.cart.cost.subtotalAmount.amount);
  const tier = TIERS.find((t) => subtotal >= t.threshold);
  if (!tier) {
    return { operations: [] };
  }

  return {
    operations: [
      {
        orderDiscountsAdd: {
          candidates: [
            {
              message: `Sconto ${tier.percentage}%`,
              targets: [{ orderSubtotal: { excludedCartLineIds: [] } }],
              value: { percentage: { value: tier.percentage } },
            },
          ],
          selectionStrategy: OrderDiscountSelectionStrategy.First,
        },
      },
    ],
  };
}
Codice JavaScript di esempio di una Shopify Function per uno sconto a scaglioni sul subtotale del carrello
Il cuore della funzione: trova lo scaglione e restituisce lo sconto.

Il subtotale arriva come testo, per questo lo converto con parseFloat. L’operazione orderDiscountsAdd propone uno sconto “candidato” sul subtotale dell’ordine, e selectionStrategy dice a Shopify quale scegliere se ce n’è più di uno. Struttura e nomi sono quelli del riferimento della Discount Function API.

Dopo shopify app deploy la funzione è su Shopify, ma lo sconto va ancora creato: nel tutorial ufficiale si usa la mutation discountAutomaticAppCreate dell’Admin API, con il permesso write_discounts. In un progetto vero metto le soglie in un metafield, così il negozio può cambiarle senza toccare il codice: è anche l’approccio dell’esempio a scaglioni di Shopify.

Due avvertenze. Se vendi in più valute, il subtotale arriva nella valuta del carrello: le soglie vanno pensate per ogni mercato. E Shopify consiglia Rust per le funzioni che devono reggere carrelli molto grandi, perché il limite è sul numero di istruzioni eseguite.

Cosa serve per piano: Basic, Grow, Advanced, Plus

Grow è il nome attuale del piano che prima si chiamava “Shopify”. Ecco cosa si può fare, piano per piano (verificato a ottobre 2026; prezzi e dettagli dei piani sono nella guida ai costi di Shopify):

CosaBasic, Grow, AdvancedPlus
Functions dentro app pubbliche dell’App Storesìsì
Functions dentro app personalizzatenosì
Editor del checkout (logo, colori, caratteri)sìsì
Stile avanzato con la Checkout Branding APInosì
Checkout UI extensions in informazioni, spedizione e pagamentonosì
Checkout UI extensions nelle pagine Grazie e Stato dell’ordinesìsì

La conseguenza pratica: se non sei su Plus e ti serve una regola di sconto, spedizione o pagamento particolare, la strada è un’app pubblica che usa le Functions. Un’app personalizzata con Functions è riservata a Plus. Quando un’app su misura ha senso, ne parlo nella guida all’app Shopify personalizzata.

E prima di ogni sviluppo vale la pena chiedersi se lo sconto serve davvero: a volte una buona strategia commerciale funziona meglio di una regola complicata, come racconto nelle strategie per aumentare le vendite su Shopify.

Domande frequenti

Le Shopify Functions funzionano senza Shopify Plus?

Sì, ma solo dentro app pubbliche distribuite sull’App Store: su qualsiasi piano puoi installare un’app che usa le Functions per sconti, spedizioni o pagamenti. Le app personalizzate che contengono Functions, invece, sono riservate ai negozi Plus. Alcune API hanno regole proprie, per esempio quella per l’instradamento degli ordini, disponibile solo su richiesta per Plus.

Devo riscrivere i miei Scripts?

Sì: dal 30 giugno 2026 gli Shopify Scripts non vengono più eseguiti, e il loro codice Ruby non si può riusare. Prima di riscrivere, però, controlla se le impostazioni standard degli sconti o un’app pubblica coprono già quella regola. Quello che resta si rifà con le Functions: sconti, spedizioni e pagamenti hanno ognuno la sua API.

Posso aggiungere un campo al checkout?

Sul piano Plus sì, con una Checkout UI extension nelle pagine informazioni, spedizione o pagamento; il valore si salva negli attributi o nei metafield del carrello. Sugli altri piani non si possono aggiungere campi in quelle pagine. Le alternative sono un campo nella pagina del carrello, gestito dal tema, o un blocco nelle pagine Grazie e Stato dell’ordine.

Le Functions rallentano il checkout?

Sono pensate per non farlo: girano sui server di Shopify, con limiti stretti su memoria, dati in ingresso e numero di istruzioni. Shopify però chiede di scriverle con attenzione alle prestazioni, perché una funzione pesante può fallire con carrelli grandi e creare problemi al cliente. Per questo tengo leggera la query di input e uso Rust quando serve.

Conclusione

Gli Scripts e checkout.liquid non tornano. Al loro posto c’è un sistema più rigido ma più sicuro: Functions per la logica, editor e UI extensions per l’aspetto, eventi cliente per il tracciamento. Il trucco è capire quale pezzo ti serve e cosa permette il tuo piano.

Se vuoi che rifaccia io le tue regole, lo faccio dentro un progetto di sviluppo Shopify o come intervento di assistenza sul negozio.

Usavi gli Scripts o vuoi una regola di sconto che Shopify non ti fa impostare? Spiegamela dalla pagina contatti: ti dico come si fa oggi. 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.