Woocommerce

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.

Post Recentes

Restaurar dump do Magento 2 em outro servidor: trocar a base_url no SQL

Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…

22 horas atrás

Criar exceção customizada em PHP: quando estender Exception compensa

Seu catch trata pedido inexistente e banco fora do ar do mesmo jeito. Veja como criar exceção customizada em PHP…

2 dias atrás

DataProvider Magento 2: form do admin abre com campos vazios ao editar

O form do admin salva mas abre em branco na edição: veja o getData() indexado pelo id da entidade e…

3 dias atrás

register_post_meta com show_in_rest: campo personalizado no /wp-json

O meta está no banco mas some do /wp-json/wp/v2/posts. Veja o register_post_meta certo, com single, type, schema de array e…

3 dias atrás

IntlDateFormatter: data por extenso em pt-BR sem array de meses

Escreva 31 de agosto de 2026 em PHP 8.3 sem aquele array com os doze meses, usando IntlDateFormatter com pattern…

4 dias atrás

wp_postmeta lento: índice em meta_key e meta_value para meta_query

Listagem de CPT com meta_query que demora segundos: veja o EXPLAIN da query do WP_Query e o índice composto em…

5 dias atrás