Variação não está disponível no WooCommerce: limpar transients e lookup

Mexeu no preço ou no atributo de um produto variável e agora o cliente escolhe a combinação e leva um “Desculpe, este produto não está disponível. Escolha uma combinação diferente”. A variação está publicada, com preço e com estoque. Não é o produto: é dado velho guardado pelo WooCommerce.

Essa frase vem do template de variação indisponível, e o JS só mostra ela quando a combinação escolhida não está no data-product_variations do formulário — o JSON que o get_available_variations() montou na hora de renderizar a página.

Primeiro os transients de produto

Cada produto variável guarda a faixa de preços no transient wc_var_prices_ seguido do ID do produto (o hash de preço fica dentro, como chave do array). A ferramenta de transients sobe a versão do cache de produto e invalida esse monte de uma vez:

sudo -u www-data wp wc tool list
sudo -u www-data wp wc tool run clear_transients --user=1

É o mesmo botão de WooCommerce > Status > Ferramentas > Transientes do WooCommerce, só que pelo terminal. Os comandos wp wc passam pela REST, por isso exigem o --user de um administrador. O wp transient delete --all também resolve, mas leva junto o cache do site inteiro; em loja grande eu fico na ferramenta.

Quando o problema é a tabela de lookup

Se limpou tudo e o erro voltou, olhe a wp_wc_product_meta_lookup (troque o prefixo se o seu não for wp_). É ela que responde por preço mínimo, máximo e situação de estoque nas consultas da loja, e ela desencontra do postmeta quando uma importação grava direto no banco:

SELECT product_id, min_price, max_price, stock_status
FROM wp_wc_product_meta_lookup
WHERE product_id IN (SELECT ID FROM wp_posts WHERE post_parent = 1234);

Preço nulo ou stock_status errado nessa consulta confirma o diagnóstico. Com backup do banco na mão, refaça as tabelas e rode as migrações pendentes do plugin:

sudo -u www-data wp wc update
sudo -u www-data wp wc tool run regenerate_product_lookup_tables --user=1

A regeneração roda em lotes pelo Action Scheduler, então dê alguns minutos em loja grande antes de testar. E confira o óbvio que eu já deixei passar: o atributo precisa estar marcado como “Usado para variações” na aba Atributos do produto pai. Sem isso o seletor nunca acha combinação, por mais transient que você apague.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *