🎉 USE O CUPOM DESCONTO.FULL | 20% OFF acima de R$ 50,00

Como corrigir a exibição de estoque do WooCommerce com o JetEngine

Time Full Services Time Full Services
Tipo WooCommerce
Nome do erro Estoque do WooCommerce exibe errado com JetEngine EN: WooCommerce inventory displaying incorrectly with JetEngine
Severidade Grave
Descrição O estoque do WooCommerce aparecer errado no JetEngine significa que o Listing Grid mostra quantidade diferente da real: número desatualizado, zero em produto disponível, ou estoque que não baixa após a venda. Quase sempre vem do Dynamic Field lendo a meta _stock crua em vez do estoque oficial, ou de cache servindo valor antigo.

O que é o estoque do WooCommerce errado no JetEngine?

O JetEngine exibe dados de produto do WooCommerce através de um Dynamic Field, que lê um valor do banco e mostra no Listing Grid ou no template do produto. Quando esse campo aponta para a meta _stock crua, ele mostra o número guardado no banco sem passar pela camada de estoque do WooCommerce, que considera o status _stock_status, backorders e o formato de exibição configurado em WooCommerce -> Configurações -> Produtos -> Inventário. O resultado é um estoque que diverge do real: o cliente vê uma quantidade que não bate com a página nativa do produto, vê zero num item disponível, ou continua vendo o mesmo número depois de uma venda. Como o estoque é a base da decisão de compra, o erro causa venda de item esgotado e perda de pedido por produto marcado como indisponível sem motivo.

Como identificar

  • O Listing Grid montado no JetEngine mostra uma quantidade de estoque diferente da exibida na página nativa do produto WooCommerce.
  • O produto continua aparecendo como ‘Em estoque’ com número antigo no JetEngine mesmo depois de uma venda já ter baixado o estoque real.
  • O Dynamic Field mostra 0 ou vazio num produto que está disponível, porque a opção ‘Gerenciar estoque?’ está desligada e a meta _stock não existe.
  • Produtos com ‘Encomendas permitidas’ (backorder) aparecem como esgotados no JetEngine, pois o campo só leu o número e ignorou o _stock_status.
  • Ao limpar o cache do site, o estoque no JetEngine corrige por alguns minutos e depois volta a divergir.

Como prevenir

  • Sempre exiba estoque no JetEngine via o estoque oficial do WooCommerce, nunca lendo a meta _stock crua, para que status, backorder e formato de exibição sejam respeitados
  • Mantenha o cache de query do JetEngine desligado nos listings que mostram estoque, ou invalide-o a cada pedido pago
  • Padronize a opção ‘Gerenciar estoque?’ em todos os produtos que precisam exibir quantidade, para evitar campos vazios
  • Após atualizar o WooCommerce ou o JetEngine, teste um Listing Grid de estoque comprando um item e conferindo se a baixa aparece na hora

Causa

  • O Dynamic Field do JetEngine está com a fonte em 'Post Meta' apontando para a chave _stock, que guarda só o número cru e ignora o _stock_status, as backorders e o formato de exibição de inventário do WooCommerce.
  • O produto está com a opção 'Gerenciar estoque?' desligada no editor, então a meta _stock não existe e o campo lê vazio, enquanto o _stock_status segue como instock.
  • O Listing Grid está sob cache (cache de página do WP Rocket, object cache Redis, ou o próprio cache de query do JetEngine) servindo o valor de estoque capturado antes da última venda.
  • A opção 'Formato de exibição de estoque' em WooCommerce -> Configurações -> Produtos -> Inventário está como 'Nunca mostrar quantidade', mas o Dynamic Field força a meta _stock e exibe um número que a loja deveria esconder.
  • Há HPOS (armazenamento de pedidos em tabelas próprias) ativo e um plugin de terceiros sincroniza estoque por outra rota, deixando a meta _stock do produto dessincronizada do estoque calculado por wc_get_product.

Como resolver

  1. Confirme qual valor está certo: abra a página nativa do produto no admin e compare a quantidade real com a exibida no Listing Grid do JetEngine. Anote se o produto gerencia estoque, qual o status e se permite encomendas, para saber se o erro é de leitura ou de cache.
  2. Troque a fonte do Dynamic Field: no Dynamic Field do JetEngine, deixe de ler a meta crua e passe a usar o estoque oficial do WooCommerce. Na configuração do campo, ajuste a fonte de Post Meta para o callback de estoque do WooCommerce, ou troque a meta key conforme o que você precisa exibir.
    Fonte: WooCommerce / Object Field (em vez de Post Meta cru)
    _stock_status
    _manage_stock
  3. Garanta que o produto gerencia estoque: no editor do produto, na aba Inventário, marque a opção de gerenciar estoque e defina a quantidade. Sem isso a meta _stock não é gravada e qualquer campo que a leia fica vazio.
  4. Produto -> Dados do produto -> Inventário -> Gerenciar estoque?
  5. Alinhe o formato de exibição de estoque: verifique a configuração global de inventário do WooCommerce e decida se a quantidade deve aparecer. Se a loja esconde quantidade, o Dynamic Field deve mostrar status, não o número cru.
    WooCommerce -> Configurações -> Produtos -> Inventário -> Formato de exibição de estoque
  6. Limpe o cache do listing após uma venda: force a limpeza do cache de página e do object cache, e desligue o cache de query do JetEngine para esse Listing Grid de estoque. Teste fazendo uma compra e confirmando que o número baixa na hora.
    wp cache flush
    JetEngine -> Listing -> Meta Query -> Cache: Off
PHP
// functions.php do tema filho — callback de exibição de estoque p/ Dynamic Field do JetEngine.
// Lê o estoque OFICIAL via wc_get_product (respeita status, backorder e gerenciamento),
// em vez da meta _stock crua. Registre o callback no campo do JetEngine.
add_filter( 'jet-engine/listings/dynamic-field/custom-callback', function ( $callbacks ) {
    $callbacks['full_wc_stock_label'] = 'FULL: estoque WooCommerce (oficial)';
    return $callbacks;
} );

function full_wc_stock_label( $product_id ) {
    $product = wc_get_product( $product_id );
    if ( ! $product ) {
        return '';
    }
    if ( ! $product->managing_stock() ) {
        return $product->is_in_stock() ? 'Em estoque' : 'Esgotado';
    }
    $qty = (int) $product->get_stock_quantity();
    if ( $qty > 0 ) {
        return sprintf( '%d em estoque', $qty );
    }
    return $product->backorders_allowed() ? 'Disponível por encomenda' : 'Esgotado';
}

Perguntas frequentes

Por que o JetEngine mostra um estoque diferente da página do produto?
Porque o Dynamic Field provavelmente lê a meta _stock crua, que é só o número guardado no banco. A página nativa do WooCommerce passa esse número pela camada de estoque, que considera o status do produto, as encomendas permitidas e o formato de exibição. Aponte o campo para o estoque oficial do WooCommerce para os dois baterem.
O estoque no Listing Grid não muda depois de uma venda. O que fazer?
Isso é cache. O Listing Grid pode estar sob cache de página, object cache ou cache de query do próprio JetEngine, servindo o valor capturado antes da compra. Desligue o cache de query desse listing e invalide o cache de página a cada pedido pago para o número baixar na hora.
O Dynamic Field mostra zero num produto que está disponível. Por quê?
Quando a opção de gerenciar estoque está desligada no produto, a meta _stock não existe e o campo lê vazio ou zero, mesmo com o status como Em estoque. Marque a opção de gerenciar estoque na aba Inventário e defina a quantidade, ou exiba o status em vez do número.
Como exibir só o status em vez da quantidade no JetEngine?
Use a meta _stock_status como fonte do Dynamic Field. Ela retorna instock, outofstock ou onbackorder, que você pode mapear para texto amigável. Isso respeita a escolha de esconder quantidade feita em Configurações de Inventário do WooCommerce.
Produtos com encomenda permitida aparecem esgotados no JetEngine. Como resolver?
O campo está lendo só o número e o estoque chegou a zero, mas o produto permite backorder. Em vez da quantidade crua, leia o estoque oficial do WooCommerce, que considera o status onbackorder, ou exiba o _stock_status para que o item continue como disponível por encomenda.
Mudar para o estoque oficial do WooCommerce quebra o filtro de estoque do JetSmartFilters?
Não precisa quebrar. O filtro continua operando sobre a meta de estoque do produto. Se você exibe via callback oficial mas filtra por meta, padronize a chave usada nos dois lugares, normalmente _stock_status para disponibilidade, para que exibição e filtro fiquem consistentes.
Essa correção exige editar código do tema?
Na maioria dos casos não. A troca da fonte do Dynamic Field, o ajuste de gerenciar estoque e a limpeza de cache são feitos pelo painel. Só é preciso código se você quiser formatar a saída do estoque com um callback próprio, como mostrar Em estoque acima de um limite.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes