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

Comando CLI Magento 2: criar a classe e registrar no di.xml

A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…

11 horas atrás

Traduzir o pt_BR.csv do Magento 2 em lote sem perder a coluna de origem

Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…

1 dia atrás

WordPress preso no modo de manutenção: apagar o arquivo .maintenance

O site responde 503 com "Momentaneamente indisponível para manutenção programada" depois de um update interrompido. Apague o .maintenance e feche…

2 dias atrás

Preço a partir de no WooCommerce: esconder o intervalo do produto variável

Troque o intervalo R$ 49,00 – R$ 129,00 do produto variável por A partir de R$ 49,00 com o filtro…

3 dias atrás

Massaction Magento 2: ação em massa na grid da sua UI listing

Grid do admin sem checkbox e com o botão Ações vazio? Falta o selectionsColumn e o nó massaction no listing.xml,…

3 dias atrás

Template part não aparece: parts/header.html e o theme.json do tema de blocos

Criou parts/header.html e o Editor de Site não lista a parte? Declare templateParts no theme.json e apague a versão salva…

4 dias atrás