window.aftersell.cart.hooks.
Um hook muda o que o comprador vê; uma ação muda o que está no carrinho dele. Ocultar uma linha de brinde com um transform a mantém no carrinho e no total. Removê-la com
removeItem a tira de verdade.Hooks são chamadas de configuração, então é seguro registrá-los logo no topo do seu script, sem precisar esperar por
ready(). Registre-os no script de Initialization do seu carrinho (veja Scripts personalizados).Como o registro funciona
register*. Você o chama com a sua função; ele retorna uma função de desregistro que você pode chamar para remover a sua.
Um hook que lança um erro, ou que não é uma função, é pulado; os demais ainda rodam, e o carrinho continua funcionando. Uma integração quebrada não consegue derrubar a adição ao carrinho, o seletor de assinatura ou a ordenação.
O outro lado é que um hook seu quebrado falha silenciosamente: nada chega ao console do navegador. Veja Depuração para saber onde essas falhas aparecem.
registerLineTransform
registerLineTransform(fn) roda para cada linha do carrinho antes de ela ser renderizada. Use-o para ocultar uma linha ou mudar como ela é exibida, sem tocar no que realmente está no carrinho do comprador.
A função recebe uma linha somente leitura mais setters. Retorna uma função de desregistro.
setInternalProperties é o setter por trás do agrupamento de bundles: carimbar as propriedades canônicas de bundle em cada linha é como você faz linhas separadas de um app de terceiros serem renderizadas como um único item. Veja Agrupar linhas de bundle de outro app.
registerLineComparator
Array.prototype.sort espera. Ele roda depois de ocultar e renomear, então vê as linhas transformadas.
0 para pares sobre os quais você não tem opinião. É isso que passa a decisão para o próximo comparator em vez de impor uma ordem a ele.
Use para: subir assinaturas ou itens de alto valor para o topo, afundar brindes e complementos para o final, manter um produto patrocinado em primeiro.
registerCartEnricher
registerCartEnricher(registration) busca dados extras de produto ou variante na Storefront API do Shopify e os anexa a cada linha correspondente do carrinho em line.metadata[id]. Use-o para exibir metafields, tags ou qualquer outra coisa que a Storefront API exponha, sem necessidade de alteração de código pelo Aftersell.
Retorna uma função de desregistro.
Sempre que o carrinho carrega ou muda, o Aftersell busca o seu fragment para cada produto ou variante no carrinho e anexa o resultado. A busca não é bloqueante: o carrinho é renderizado imediatamente e reemite
cart_updated quando os dados chegam. Um fragment lento ou com falha nunca atrasa nem quebra o carrinho.
line.metadata.pricing é undefined até a primeira busca resolver, e metadata em si tem {} como padrão.
Use para: puxar um metafield para cada linha (uma estimativa de entrega, uma lista de ingredientes, uma flag de “enviado separadamente”, um multiplicador de fidelidade) e renderizá-lo por meio de um bloco Custom code. Veja exibindo dados de metafield nas linhas do carrinho.
Vários enrichers coexistem tranquilamente, já que cada
id é seu próprio namespace, então os dados nunca colidem.registerSubscriptionOptionsTransform
options.filter(...) e apagaria silenciosamente os planos de todos os outros apps no caminho. Com setters você só consegue descrever as suas próprias edições: os patches se mesclam por plano e por campo, e o último a escrever vence um conflito genuíno no mesmo campo do mesmo plano. Um transform que lança um erro não contribui com nada, e os outros ainda se aplicam.
Todo transform vê as opções originais, não uma visão parcialmente aplicada, então a ordem de registro não muda o que você está lendo.
A ordem dos planos permanece como o Shopify retornou, então um transform não pode reordenar. Para controlar qual plano é oferecido primeiro (e a qual plano o botão de upgrade de compra única assina), use
registerDefaultSubscriptionOptionSelector, que promove a escolha dele para a frente.discountPercent não tem setter, porque um plano que o Shopify não honraria no checkout seria só uma promessa quebrada no seletor.
registerDefaultSubscriptionOptionSelector
id de plano, ou null para passar a vez.
null para as linhas com que você não se importa em vez de adivinhar. Isso passa a decisão para o próximo selector em vez de sobrescrevê-la. Um id que não corresponde a nenhum plano na linha é tratado como null e também cede a vez, então um id obsoleto não consegue zerar o seletor.
Sua função recebe (options, context), o mesmo context que o transform de opções recebe.
registerSkipAddToCartRule
true para deixar um formulário de produto específico adicionar ao carrinho normalmente, ignorando o Aftersell por completo. Isso é útil para um formulário que precisa do próprio redirecionamento ou tratamento.
true pula, então mantenha sua regra restrita, correspondendo aos formulários específicos que você controla, e retorne false para todo o resto. As regras são avaliadas em ordem de registro e param no primeiro true, então não coloque efeitos colaterais em uma: se a sua roda ou não depende do que foi registrado antes dela.
Use para: um formulário de pré-venda ou orçamento que precisa do próprio redirecionamento, o fluxo personalizado de um app de assinatura, um botão de “comprar agora” que deve ir direto para o checkout. Para desativar a interceptação na página inteira, use skip_add_to_cart_interceptor, mas prefira este hook, que é limitado aos formulários que você nomeia.
Para onde ir agora
- Objeto de carrinho: o formato da linha que um transform recebe.
- Eventos: tudo o que você pode assinar.
- Ações: lendo e alterando o carrinho.
- Casos de uso: soluções completas para pedidos comuns.