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

Custom post type dando 404: flush_rewrite_rules na ativação do plugin

A listagem do custom post type abre e o single dá 404 no WordPress 6.9. Entenda o cache das rewrite…

5 horas atrás

systemd timer no lugar do cron: agendar script com log e sem execução dupla

Um par .service e .timer substitui a linha do crontab com log no journal, execução perdida recuperada no boot e…

14 horas atrás

Descrição em massa no WooCommerce: wp eval-file lendo a lista de SKUs

400 produtos importados do fornecedor com a aba Descrição vazia. Um wp eval-file percorre os SKUs sem texto, grava pelo…

21 horas atrás

Frete grátis no WooCommerce: esconder as outras opções de entrega

Some com PAC e SEDEX da lista quando o frete grátis está disponível, usando woocommerce_package_rates, e limpe o cache de…

1 dia atrás

Erro HTTP no WordPress ao enviar imagem para a biblioteca de mídia

A barra de upload chega no fim e o WordPress devolve só "Erro HTTP". Separe as três causas: Imagick barrado…

2 dias atrás

style amp-custom acima de 75KB: como cortar o CSS inline do AMP

The author stylesheet specified in tag 'style amp-custom' is too long? Meça o bloco com curl e tire da fila…

2 dias atrás