Como Corrigir Erros de Promoções BOGO no Checkout do WooCommerce

Aprenda a diagnosticar e corrigir falhas em promoções BOGO no checkout do WooCommerce causadas por conflitos de plugins e recálculo de carrinho.

Oferecer promoções do tipo Compre Um e Leve Outro (BOGO – Buy One, Get One) é uma estratégia clássica e eficiente para aumentar o ticket médio no comércio eletrônico. No entanto, lojistas frequentemente se deparam com um cenário crítico: a bonificação é exibida corretamente no carrinho, mas, ao avançar para a página de finalização de compra (checkout), o desconto desaparece, o item gratuito tem seu valor cobrado integralmente ou o cálculo de frete entra em loop.

Esse comportamento costuma decorrer do ciclo de vida dos dados de sessão do WooCommerce e de como extensões de terceiros manipulam os objetos da classe WC_Cart.

Por que as promoções BOGO falham na transição para o Checkout?

O WooCommerce processa os totais do carrinho através da action hook woocommerce_before_calculate_totals. Muitos plugins de terceiros que adicionam regras de BOGO interceptam esse momento para aplicar itens dinâmicos com preço zerado ou injetar cupons virtuais.

As falhas mais comuns ocorrem por:

  1. Falta de verificação de recursão infinita: Ao alterar o preço de um item dentro do hook de cálculo sem um controle booleano (flag), o método dispara a si mesmo repetidas vezes, resultando em falhas silenciosas de timeout no AJAX do checkout.
  2. Conflito com o fragment refresh (wc-ajax=update_order_review): Durante o checkout, o WooCommerce recalcula dinamicamente taxas, métodos de envio e descontos a cada alteração de campo. Se o plugin de BOGO não persistir o estado do item na sessão (WC()->session), a linha de bonificação é descartada.
  3. Ordem de prioridade de execução: Plugins de frete ou de gateways de pagamento que executam validações estritas podem ignorar itens customizados inseridos programaticamente sem metadados válidos.

Passo a passo para diagnosticar e contornar a falha

1. Identificar a persistência do item no carrinho

Verifique se o produto bonificado está sendo adicionado como uma linha real no carrinho (cart_item_data) ou apenas como um desconto nominal. O método mais estável para o WooCommerce é adicionar o item físico com metadados explícitos:

php
addaction(‘woocommercebeforecalculatetotals’, ‘recalcularprecosbogo’, 20, 1);
function recalcularprecosbogo($cart) {
if (isadmin() && !defined(‘DOINGAJAX’)) {
return;
}

// Evita loop infinito na mesma requisição
static $executado = false;
if ($executado) {
    return;
}
$executado = true;

foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
    if (isset($cart_item['is_bogo_free']) && $cart_item['is_bogo_free'] === true) {
        $cart_item['data']->set_price(0);
    }
}

}

2. Garantir validação na etapa de submissão do pedido

Para evitar inconsistências entre a interface do checkout e o pedido gravado no banco de dados, utilize o hook woocommerce_checkout_create_order_line_item. Em implementações que realizo em lojas virtuais com catálogos complexos, é comum adicionar metadados específicos ao item do pedido, garantindo que o relatório fiscal e o ERP recebam a indicação de bonificação sem quebrar a integridade do estoque.

3. Depuração de requisições AJAX

Abra o console do navegador na aba Network e monitore a requisição /?wc-ajax=update_order_review. Se o JSON de resposta retornar erros de payload ou descarte de itens, revise se regras de cache em nível de servidor (como Redis, Memcached ou plugins de cache) não estão armazenando em cache requisições autenticadas de checkout.

Conclusão e Próximos Passos

Regras de desconto que funcionam apenas na camada visual, sem uma sincronização técnica profunda com a API de pedidos do WooCommerce, tendem a gerar abandonos de carrinho e retrabalho operacional. Ajustar prioridades de hooks e sanear a persistência de sessão resolvem a maioria dos conflitos de checkout.

Se sua loja opera regras de BOGO complexas ou utiliza combinações de plugins que continuam falhando durante o fechamento do pedido, uma consultoria técnica especializada pode mapear as dependências e desenvolver uma rotina sob medida, segura e compatível com futuras atualizações do WooCommerce.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.