# Como corrigir o carrinho do WooCommerce que não funciona com o Elementor Pro

O cart do WooCommerce não funcionar com o Elementor Pro significa que o widget Menu Cart ou Cart mostra o contador parado em zero, não abre o painel lateral ou não soma o produto após o clique. Quase sempre vem dos fragments AJAX bloqueados por cache, do script wc-cart-fragments minificado, ou do tema sem suporte ao WooCommerce.

## 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.

**Antes de começar:** Faça backup e teste em staging antes de mexer em cache, delay de JS ou functions.php de uma loja no ar. Nunca desligue o nonce dos fragments para forçar a atualização: isso abre brecha de CSRF no carrinho.

## 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

Erros relacionados

- [Como corrigir Add to cart que não funciona no WooCommerce](https://full.services/wp-fixer/corrigir-add-to-cart-woocommerce/)
- [Como corrigir carrinho do WooCommerce que esvazia sozinho](https://full.services/wp-fixer/corrigir-carrinho-esvazia-woocommerce/)
- [Como corrigir o conflito entre Elementor e WP Rocket no WordPress](https://full.services/wp-fixer/corrigir-conflito-elementor-wp-rocket/)

## 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

1. 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.
2. 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
```

3. 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
```

4. 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
```

5. 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
```


## Código

```php
// 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 );
```

## Perguntas frequentes

### O contador do Menu Cart do Elementor fica em zero mesmo com produto no carrinho. Por quê?

Na quase totalidade dos casos é cache servindo o fragment antigo. A rota wc-ajax=get_refreshed_fragments precisa rodar a cada adição e nunca pode estar cacheada. Exclua o carrinho e essa rota do cache e teste de novo como visitante anônimo.

### O painel lateral do carrinho do Elementor não abre. O que verificar?

Abra o console com F12 e procure por um erro de JavaScript como jQuery is not defined ou wc_cart_fragments_params is not defined. Ele indica que o delay de JS ou a minificação quebrou o script do carrinho. Tire o jQuery e o wc-cart-fragments do delay e da combinação.

### Preciso do Elementor Pro para usar o widget de carrinho?

Sim. Os widgets Menu Cart e Cart fazem parte do conjunto WooCommerce do Elementor Pro e só aparecem com a versão Pro ativa, além do WooCommerce instalado e ativo. Na versão gratuita do Elementor esses widgets não existem.

### Funciona quando estou logado como admin, mas não para o cliente. Por quê?

Quase sempre é cache de página. Para o admin o WooCommerce normalmente ignora o cache, então o fragment atualiza; para o visitante anônimo a página vem cacheada com o contador zerado. Marque carrinho e checkout como não cacheáveis e limpe o cache da CDN.

### Atualizei o Elementor Pro e o carrinho parou. O que faço primeiro?

Regenere os arquivos do Elementor em Elementor -> Ferramentas -> Regenerar arquivos e dados, limpe todo o cache e cheque no console se algum script do carrinho está com erro. Atualizações costumam invalidar o CSS e o JS antigos que ficaram em cache.

### Como sei se o problema é cache ou conflito de plugin?

Se o contador atualiza só depois de um F5, é cache de fragment. Se nem com F5 ele soma e o console mostra erro de JavaScript, é conflito de script. Para isolar conflito, desative os plugins de otimização e teste o widget com o tema padrão ativo.

### Meu tema não é do Elementor. O widget de carrinho ainda funciona?

Funciona, desde que o tema declare suporte ao WooCommerce. Sem essa declaração o Elementor renderiza o widget, mas os hooks de fragment do WooCommerce não registram e o contador fica parado. Use um tema filho com o suporte declarado.

**Fonte:** [Elementor — WooCommerce Widgets (Menu Cart)](https://elementor.com/help/woocommerce-widgets/)
