Skip to main content
Observe o total do carrinho e mantenha um brinde sincronizado com ele: adicione o brinde quando o comprador cruzar um limite de gasto e remova-o se ele voltar a ficar abaixo.
Para uma versão configurável pelo lojista com níveis, regras por mercado e uma barra de progresso, use o bloco Rewards, sem código. Isto é para quando sua regra é algo que o bloco não consegue expressar.

O snippet

Cole em Cart settings → Custom script → Initialization e defina as duas constantes:

Como funciona

reconcileGift descreve o estado em que o carrinho deveria estar, e então faz no máximo uma alteração para chegar lá:
  • Qualifica e o brinde não está lá → addItem o adiciona.
  • Não qualifica e o brinde está lá → removeItem o remove, pela key da linha.
  • Caso contrário → não faz nada.
Ela executa tanto em cart_loaded (para que um carrinho que já qualifica no carregamento da página receba o brinde) quanto em cart_updated (para reagir a cada mudança depois disso). Como cart_loaded é reproduzido para assinantes tardios, isso funciona não importa quando seu script executa.
As guardas !gift / gift são o que impede um loop. Adicionar o brinde dispara cart_updated, que executa reconcileGift de novo, e a segunda passagem encontra o brinde já presente, então não faz nada. Remova as guardas e você terá um loop infinito. Veja as duas regras.
Note que adicionar o brinde aumenta o total do carrinho, então um limite próximo ao preço de um produto pode oscilar: adicionar um brinde de $0 é seguro, mas um brinde com preço poderia empurrar o carrinho acima do limite sozinho. Mantenha o brinde grátis, ou compare com um total que o exclua.

Adaptando

Condicione pela contagem de itens em vez do gasto:
Condicione por um produto específico estar no carrinho:
Só em certos países. Leia context, que está disponível antes de o carrinho carregar:
Exclua o brinde do limite para que ele não sustente a si mesmo:
Marque o brinde para que ele pareça um brinde. Um line transform pode mudar o título de uma linha, o título da variante, o estado oculto e as propriedades internas — então renomeie-o:
Um line transform não pode ocultar os controles de quantidade de uma linha — seus únicos setters são setTitle, setVariantTitle, setHidden e setInternalProperties. Se um comprador mudar a quantidade do brinde, corrija a partir de um handler de cart_updated.

Para onde ir a seguir