window.aftersell.cart.hooks.
Un hook cambia ciò che l’acquirente vede; un’azione cambia ciò che è nel suo carrello. Nascondere una riga di omaggio con una transform la lascia nel carrello e nel totale. Rimuoverla con
removeItem la toglie davvero.Gli hook sono chiamate di set-up, quindi è sicuro registrarli in cima al tuo script, senza bisogno di aspettare
ready(). Registrali nello script di Initialization del tuo carrello (vedi Script personalizzati).Come funziona la registrazione
register*. Lo chiami con la tua funzione; restituisce una funzione di deregistrazione che puoi chiamare per rimuovere la tua.
Un hook che genera un errore, o che non è una funzione, viene saltato; gli altri vengono comunque eseguiti e il carrello prosegue. Un’integrazione rotta non può abbattere l’add-to-cart, il selettore di abbonamento o l’ordinamento.
Il rovescio della medaglia è che un tuo hook rotto fallisce silenziosamente: nulla raggiunge la console del browser. Vedi Debugging per dove emergono questi errori.
registerLineTransform
registerLineTransform(fn) viene eseguito per ogni riga del carrello prima che venga renderizzata. Usalo per nascondere una riga o cambiare come si legge, senza toccare ciò che è effettivamente nel carrello dell’acquirente.
La funzione riceve una riga in sola lettura più dei setter. Restituisce una funzione di deregistrazione.
setInternalProperties è il setter dietro il raggruppamento dei bundle: stampare le proprietà canoniche del bundle su ogni riga è il modo in cui fai renderizzare come un unico articolo le righe di carrello separate di un’app di terze parti. Vedi Raggruppare righe bundle di un’altra app.
registerLineComparator
Array.prototype.sort si aspetta. Viene eseguito dopo hide e rename, quindi vede le righe trasformate.
0 per le coppie su cui non hai un’opinione. È così che passi la decisione al comparator successivo invece di imporgli un ordine.
Usalo per: portare in cima abbonamenti o articoli di alto valore, spingere in fondo omaggi e add-on, mantenere un prodotto sponsorizzato al primo posto.
registerCartEnricher
registerCartEnricher(registration) recupera dati extra di prodotto o variante dalla Storefront API di Shopify e li allega a ogni riga del carrello corrispondente in line.metadata[id]. Usalo per esporre metafield, tag o qualsiasi altra cosa la Storefront API renda disponibile, senza che sia necessaria alcuna modifica al codice da parte di Aftersell.
Restituisce una funzione di deregistrazione.
Ogni volta che il carrello si carica o cambia, Aftersell recupera il tuo fragment per ogni prodotto o variante nel carrello e allega il risultato. Il fetch è non bloccante: il carrello viene renderizzato immediatamente e riemette
cart_updated quando i dati arrivano. Un fragment lento o che fallisce non ritarda né rompe mai il carrello.
line.metadata.pricing è undefined finché il primo fetch non si risolve, e metadata stesso è {} per impostazione predefinita.
Usalo per: portare un metafield su ogni riga (una stima di consegna, una lista di ingredienti, un flag “spedito separatamente”, un moltiplicatore fedeltà) e renderizzarlo tramite un blocco Custom code. Vedi mostrare dati di metafield sulle righe del carrello.
Più enricher coesistono senza problemi, dato che ogni
id è un namespace a sé, quindi i loro dati non collidono mai.registerSubscriptionOptionsTransform
options.filter(...) ed eliminerebbe silenziosamente i piani di tutte le altre app strada facendo. Con i setter puoi descrivere solo le tue modifiche: le patch si fondono per piano e per campo, e l’ultimo scrittore vince un conflitto reale sullo stesso campo dello stesso piano. Una transform che genera un errore non contribuisce nulla, e le altre si applicano comunque.
Ogni transform vede le opzioni originali, non una vista parzialmente patchata, quindi l’ordine di registrazione non cambia ciò che stai leggendo.
L’ordine dei piani resta quello restituito da Shopify, quindi una transform non può riordinare. Per controllare quale piano viene offerto per primo (e a quale si abbona il pulsante di upgrade da acquisto singolo), usa
registerDefaultSubscriptionOptionSelector, che promuove la sua scelta in prima posizione.discountPercent non ha un setter, perché un piano che Shopify non onorerebbe al checkout sarebbe solo una promessa infranta nel selettore.
registerDefaultSubscriptionOptionSelector
id di un piano, oppure null per passare la mano.
null per le righe che non ti interessano invece di tirare a indovinare. Questo passa la decisione al selector successivo invece di sovrascriverla. Un id che non corrisponde ad alcun piano sulla riga viene trattato come null e cede anch’esso la mano, quindi un id obsoleto non può svuotare il selettore.
La tua funzione riceve (options, context), lo stesso context che riceve la transform delle opzioni.
registerSkipAddToCartRule
true per lasciare che un form prodotto specifico aggiunga al carrello normalmente, bypassando completamente Aftersell. È utile per un form che necessita del proprio redirect o della propria gestione.
true salta, quindi mantieni la tua regola ristretta, facendola corrispondere ai form specifici che possiedi, e restituisci false per tutto il resto. Le regole vengono valutate in ordine di registrazione e si fermano al primo true, quindi non mettere effetti collaterali in una di esse: se la tua viene eseguita o meno dipende da cosa si è registrato prima.
Usalo per: un form di pre-ordine o preventivo che necessita del proprio redirect, il flusso personalizzato di un’app di abbonamenti, un pulsante “buy it now” che dovrebbe andare dritto al checkout. Per disattivare invece l’intercettazione per l’intera pagina, usa skip_add_to_cart_interceptor, ma preferisci questo hook, che è limitato ai form che indichi.
Dove andare adesso
- Oggetto cart: la struttura della riga che una transform riceve.
- Eventi: tutto ciò a cui puoi sottoscriverti.
- Azioni: leggere e modificare il carrello.
- Casi d’uso: soluzioni complete alle richieste più comuni.