Como corrigir o carrinho do WooCommerce que não funciona com o Elementor Pro
O que é o erro de cart no WooCommerce com Elementor?
O widget de cart do WooCommerce no Elementor Pro (Menu Cart e Cart) exibe o contador de itens, o subtotal e o painel lateral do carrinho montados pelo editor visual em vez do template padrão do tema. Ele depende dos fragments AJAX do WooCommerce: a cada adição, o navegador chama a rota wc-ajax=get_refreshed_fragments e recebe o HTML novo do carrinho sem recarregar a página. Quando essa cadeia quebra, o widget renderiza mas fica congelado, o contador não muda e o cliente acha que o site travou.
Como identificar
- O ícone do Menu Cart aparece mas o contador fica preso em zero mesmo depois de adicionar produtos.
- Ao clicar no carrinho, o painel lateral (side cart) do Elementor não abre ou abre vazio.
- No console do navegador (F12, aba Rede) a chamada wc-ajax=get_refreshed_fragments retorna 403, 404 ou 500.
- No console aparece o erro de JavaScript ‘wc_cart_fragments_params is not defined’ ou ‘jQuery is not defined’ na página com o widget.
- O contador atualiza só depois de um F5 manual, sinal clássico de página cacheada servindo o fragment antigo.
Como prevenir
- Mantenha carrinho, checkout e a rota wc-ajax fora do cache em qualquer plugin de performance
- Deixe os scripts wc-cart-fragments e woocommerce, e o jQuery, fora da minificação, da combinação e do delay de JS
- Use sempre um tema filho que declare suporte ao WooCommerce antes de montar widgets de loja no Elementor
- Teste o contador do carrinho como visitante anônimo depois de cada atualização de tema, do Elementor Pro ou do plugin de cache
Causa
- Plugin de cache servindo a rota wc-ajax=get_refreshed_fragments em cache, devolvendo sempre o mesmo fragment com o contador zerado.
- Otimização de JavaScript minificando ou combinando o wc-cart-fragments.min.js junto de outros scripts, o que quebra o objeto wc_cart_fragments_params.
- Tema do site sem a declaração add_theme_support woocommerce, fazendo o Elementor renderizar o widget sem registrar os hooks de fragment do WooCommerce.
- Defer ou delay de JavaScript adiando o jQuery, de quem o script de fragments depende, e disparando o erro jQuery is not defined antes do carrinho montar.
- Cookie woocommerce_cart_hash ou woocommerce_items_in_cart barrado por CDN ou modo de cache agressivo, impedindo o navegador de saber que o carrinho mudou.
Como resolver
- Confirme que o widget de cart é do WooCommerce e que o WooCommerce está ativo: no editor do Elementor, garanta que o bloco usado é o widget Menu Cart ou Cart da seção WooCommerce, e não um ícone genérico. O widget só funciona com o WooCommerce instalado e ativo, porque ele pendura nos fragments AJAX do próprio WooCommerce.
- Exclua as rotas e os scripts do carrinho do cache e da otimização: no plugin de cache ou otimização, marque o carrinho e o checkout como nunca cacheados e tire da minificação e da combinação os dois scripts do WooCommerce abaixo. Sem isso, o fragment volta cacheado ou o JavaScript do carrinho quebra.
Nunca cachear: /carrinho/ e /finalizar-compra/ Excluir da minificacao/combinacao de JS: wc-cart-fragments.min.js Excluir da minificacao/combinacao de JS: woocommerce.min.js Excluir do cache: requisicoes contendo ?wc-ajax=get_refreshed_fragments - Tire o jQuery do delay e do defer: se você usa adiamento de JavaScript (delay JS ou defer), o script de fragments depende do jQuery carregado antes dele. Adicione o jQuery à lista de exclusão do delay para acabar com o erro jQuery is not defined na página do widget.
Excluir do delay/defer: jquery.min.js Excluir do delay/defer: jquery-core Excluir do delay/defer: wc-cart-fragments - Inspecione a chamada de fragment no console: abra uma página com o widget, pressione F12, vá na aba Rede, adicione um produto e observe a chamada wc-ajax=get_refreshed_fragments. Se ela retornar 403 ou 500, o firewall ou o WAF está barrando a rota; peça ao host para liberá-la. Se retornar 200 mas o contador não muda, o problema é cache de fragment.
Rota a observar: /?wc-ajax=get_refreshed_fragments Status esperado: 200 com JSON de fragments - Garanta o suporte do tema ao WooCommerce: se o tema não declara suporte ao WooCommerce, o Elementor monta o widget mas os hooks de fragment não registram. Use o código da seção abaixo no tema filho para declarar esse suporte e force a limpeza de todo o cache depois.
Limpar cache do plugin de cache Limpar cache da CDN Forcar regeneracao de CSS do Elementor em Elementor -> Ferramentas -> Regenerar arquivos e dados
// functions.php do tema filho — declara suporte ao WooCommerce e
// garante que os scripts de fragments do carrinho sejam enfileirados
// nas paginas onde o widget de cart do Elementor aparece.
add_action( 'after_setup_theme', function () {
add_theme_support( 'woocommerce' );
} );
add_action( 'wp_enqueue_scripts', function () {
if ( function_exists( 'is_woocommerce' ) ) {
wp_enqueue_script( 'wc-cart-fragments' );
}
}, 20 );














