# Como corrigir o JetCompareWishlist que não adiciona produtos no WordPress

O JetCompareWishlist não adiciona produto quando o botão Comparar ou Lista de Desejos é colocado fora de um loop de produtos, quando as páginas de comparação e de lista não estão definidas nas configurações, ou quando o cache, um conflito de JavaScript ou cookies bloqueados impedem a requisição AJAX que salva o item.

## O que é JetCompareWishlist que não adiciona produtos?

O JetCompareWishlist é o plugin da Crocoblock que adiciona dois recursos a lojas WooCommerce e listagens JetEngine: comparar produtos lado a lado e salvar produtos numa lista de desejos. O fluxo funciona assim: o visitante clica no botão Comparar ou Lista de Desejos, o plugin dispara uma requisição AJAX, grava o ID do produto em um cookie no navegador e atualiza o contador. Depois, as páginas dedicadas de comparação e de lista de desejos leem esses cookies e exibem os itens salvos.

O sintoma JetCompareWishlist não adiciona produto aparece quando esse fluxo é interrompido em algum ponto. O botão não tem um produto válido para identificar (porque está fora do loop de listagem), as páginas de destino não foram criadas e atribuídas nas configurações do plugin, ou a requisição AJAX é bloqueada por cache de página, conflito de scripts ou cookies desativados. Em qualquer um desses casos o clique não tem efeito visível: o contador continua em zero e a página de comparação ou de desejos abre vazia.

## Como identificar

- O visitante clica no botão Comparar ou Lista de Desejos e nada acontece: o contador continua em zero e o produto não entra na lista.
- A página de comparação ou a página de lista de desejos abre vazia mesmo depois de clicar no botão em vários produtos.
- No console do navegador (F12) aparece um erro na requisição AJAX (admin-ajax.php) ao clicar no botão, ou a requisição retorna status diferente de 200.
- O botão do JetCompareWishlist nem aparece no card do produto, ou aparece mas fica sem reação ao clique.
- O item some da lista assim que a página é recarregada, indicando que o cookie não foi gravado.

**Antes de começar:** Antes de mexer em regras de cache, minificação de scripts ou atualizar plugins em produção, faça um backup completo do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, para poder reverter caso a listagem ou o checkout quebrem.

## Como prevenir

- Defina as páginas de comparação e de lista de desejos nas configurações do JetCompareWishlist logo na instalação, antes de publicar os botões na loja.
- Sempre insira os botões Comparar e Lista de Desejos dentro do loop de produtos ou do template de produto único, nunca soltos em uma seção da página.
- Mantenha as páginas dinâmicas do plugin na lista de exclusão de cache do site para que o AJAX nunca seja servido a partir de HTML estático.
- Atualize WooCommerce, JetEngine e JetCompareWishlist juntos e valide em staging antes de aplicar em produção, acompanhando as mudanças de compatibilidade da Crocoblock.
- Configure o banner de consentimento de cookies para liberar cookies funcionais, já que o plugin depende deles para guardar os itens da lista.

Erros relacionados

- [Como corrigir o JetWooBuilder que não edita templates de produto](https://full.services/wp-fixer/corrigir-jetwoobuilder-nao-edita-template/)
- [Como corrigir o JetSmartFilters que não filtra dados dinâmicos](https://full.services/wp-fixer/corrigir-jetsmartfilters-nao-filtra-jetengine/)
- [Como corrigir o Listing Grid vazio no JetEngine](https://full.services/wp-fixer/corrigir-listing-grid-vazio-jetengine/)

## Causa

- O botão Comparar ou Lista de Desejos foi inserido fora de um loop de produtos (Products Loop do WooCommerce, Listing Grid do JetEngine ou template de single product): sem o contexto da listagem o plugin não recebe o ID do produto e o clique não salva nada.
- As páginas de Comparação e de Lista de Desejos não foram criadas e atribuídas em JetCompareWishlist nas Configurações: sem essas páginas de destino definidas o plugin não tem onde exibir os itens e o fluxo de salvar quebra.
- Um plugin de cache de página (WP Rocket, LiteSpeed, W3 Total Cache) está servindo HTML estático e bloqueia a requisição AJAX dinâmica que adiciona o produto, ou guarda em cache a página com o contador zerado.
- Os cookies do navegador estão bloqueados, ou um banner de consentimento LGPD/cookie só libera os cookies após o aceite, impedindo o JetCompareWishlist de gravar o ID do produto no navegador.
- Um conflito de JavaScript com outro plugin ou com a minificação/combinação de scripts (WP Rocket, Perfmatters, Autoptimize) interrompe o script do JetCompareWishlist antes do clique disparar o AJAX.
- O WooCommerce está inativo ou desatualizado em uma loja que usa os botões nos produtos do WooCommerce, então o plugin não encontra o objeto de produto esperado para registrar o item.

## Como resolver

1. Crie e atribua as páginas de comparação e lista de desejos: Crie uma página para a comparação e outra para a lista de desejos e atribua as duas nas configurações do JetCompareWishlist. Sem as páginas de destino definidas o plugin não tem onde mostrar os itens e o salvar não conclui.

```
Painel WP -> Páginas -> Adicionar nova: crie 'Comparar produtos' e 'Lista de desejos'
Painel WP -> JetCompareWishlist -> Settings (Configurações)
Em Compare Page e Wishlist Page selecione as páginas criadas e salve
```

2. Coloque o botão dentro de um loop de produtos: Confirme que o botão Comparar ou Lista de Desejos está dentro de um loop de produtos (Products Loop do WooCommerce, Listing Grid do JetEngine ou template de produto único). Fora do loop o botão não recebe o ID do produto e o clique não salva o item.

```
Edite o template da listagem (Listing Item do JetEngine ou Products Loop do Elementor)
Arraste o widget Compare Button ou Wishlist Button para dentro do item do loop
Salve o template e recarregue a página de listagem para testar o clique
```

3. Exclua as páginas do plugin do cache: Adicione as páginas de comparação e de lista de desejos à exclusão de cache e limpe o cache do site. Cache de página servindo HTML estático bloqueia o AJAX que adiciona o item e congela o contador.

```
No plugin de cache, abra as regras de exclusão (Never Cache URLs)
Adicione as URLs /comparar-produtos/ e /lista-de-desejos/
Limpe todo o cache do site (Purge All) e teste novamente o botão
```

4. Libere os cookies e isole conflito de JavaScript: Garanta que os cookies não estão bloqueados pelo banner de consentimento e desative a minificação ou combinação de JavaScript para verificar se um conflito de script trava o clique. O JetCompareWishlist depende de cookies e de seu próprio JS para gravar o produto.

```
Configure o banner de consentimento para liberar cookies funcionais por padrão
Em WP Rocket ou Perfmatters, desative temporariamente Minify/Combine JavaScript
Abra o console (F12 -> Console) e recarregue para checar erros de JS ao clicar
```

5. Atualize WooCommerce, JetEngine e o JetCompareWishlist: Em lojas WooCommerce, confirme que o WooCommerce está ativo e atualizado, e atualize o JetEngine e o JetCompareWishlist para a versão estável mais recente. Versões defasadas quebram a integração que registra o produto na lista.

```
Painel WP -> Plugins: confirme WooCommerce ativo e na versão mais recente
Painel WP -> Plugins -> Atualizações: atualize JetEngine e JetCompareWishlist
Após atualizar, limpe o cache e teste o botão em um produto
```


## Código

```php
<?php
/**
 * Exclui as paginas do JetCompareWishlist do cache de pagina.
 * Evita que o HTML estatico em cache bloqueie o AJAX que adiciona o produto.
 */
add_filter( 'rocket_cache_reject_uri', 'full_jcw_excluir_cache' );
function full_jcw_excluir_cache( $uris ) {
    $uris[] = '/comparar-produtos/(.*)';
    $uris[] = '/lista-de-desejos/(.*)';
    return $uris;
}

/**
 * Garante que o cookie do JetCompareWishlist nao seja
 * tratado como estatico pelo cache (mantem a sessao do visitante).
 */
add_filter( 'rocket_cache_dynamic_cookies', 'full_jcw_cookies_dinamicos' );
function full_jcw_cookies_dinamicos( $cookies ) {
    $cookies[] = 'jet-cw-compare';
    $cookies[] = 'jet-cw-wishlist';
    return $cookies;
}
```

## Perguntas frequentes

### Por que o JetCompareWishlist não adiciona o produto quando clico no botão

Quase sempre o botão está fora de um loop de produtos, então não recebe o ID do item, ou as páginas de comparação e de lista de desejos não foram atribuídas nas configurações. Coloque o botão dentro do loop e defina as duas páginas em JetCompareWishlist -> Settings.

### Preciso definir as páginas de comparação e de lista de desejos

Sim. O JetCompareWishlist precisa de uma página de comparação e uma de lista de desejos atribuídas nas configurações para ter onde exibir os itens. Sem elas o plugin grava o cookie mas não consegue mostrar a lista, e o fluxo parece não funcionar.

### O cache pode impedir o botão de adicionar produtos

Pode. Um plugin de cache servindo a página como HTML estático bloqueia a requisição AJAX que adiciona o item e mantém o contador zerado. Adicione as páginas do plugin à exclusão de cache e limpe todo o cache do site.

### O botão do JetCompareWishlist funciona fora do WooCommerce

Funciona também com listagens do JetEngine, desde que o botão esteja dentro do loop de listagem que fornece o ID do post ou produto. Em lojas WooCommerce, mantenha o WooCommerce ativo e atualizado para o plugin reconhecer o objeto de produto.

### Por que a página de comparação abre vazia mesmo depois de clicar nos botões

Isso indica que o cookie com os produtos não foi gravado, geralmente porque os cookies estão bloqueados, o banner de consentimento não liberou cookies funcionais, ou um conflito de JavaScript travou o script antes de salvar. Libere os cookies e teste sem minificação de JS.

### Um conflito de JavaScript pode travar o JetCompareWishlist

Sim. A minificação ou combinação de scripts feita por plugins de otimização pode quebrar o JavaScript do JetCompareWishlist e impedir o clique de disparar o AJAX. Desative temporariamente Minify/Combine JavaScript e verifique o console do navegador em busca de erros.

### Como descubro se o erro é do JetCompareWishlist ou de outro plugin

Abra o console do navegador (F12), clique no botão e observe a requisição para admin-ajax.php. Em seguida, desative os plugins de cache e otimização e os demais plugins um a um, recarregando a cada teste, até identificar o que interrompe o salvamento do item.

**Fonte:** [Crocoblock — JetCompareWishlist Knowledge Base](https://crocoblock.com/plugins/jetcomparewishlist/)
