Como corrigir a exibição de estoque do WooCommerce com o JetEngine
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
- 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.
- 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 - 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.
- Produto -> Dados do produto -> Inventário -> Gerenciar estoque?
- 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 - 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
// 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';
}














