
Woocommerce Brasil
O cliente digita o CEP e o checkout responde “Não existem métodos de entrega disponíveis”. Quase nunca é bug do WooCommerce: ou a área de entrega não cobre aquele CEP, ou o método existe dentro dela e está desligado. A checagem começa em WooCommerce > Configurações > Entrega.
Em Entrega > Opções de entrega existe a caixa “Ativar modo de depuração”. Ela mostra qual área casou com o endereço e ignora o cache de taxas, guardado na sessão do cliente sob um hash do pacote. É por isso que você mexe na área e continua vendo o resultado velho. Pela CLI:
sudo -u www-data wp option update woocommerce_shipping_debug_mode yes
sudo -u www-data wp transient delete shipping-transient-versionAí eu ligo o filtro que roda depois de todos os métodos calcularem. Vai no functions.php do tema filho, com WP_DEBUG_LOG ligado:
add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
error_log( 'CEP: ' . ( $package['destination']['postcode'] ?? '' ) );
error_log( 'taxas: ' . implode( ', ', array_keys( $rates ) ) );
return $rates;
}, 9999, 2 );Recarregue o checkout e leia o wp-content/debug.log. Array vazio quer dizer que nenhum método foi gerado, e o problema está na área ou no custo. Array cheio, com chaves tipo flat_rate:3, e mesmo assim tela vazia quer dizer que alguém filtrou depois de você: plugin de frete grátis condicional, de restrição por produto ou dos Correios.
Achou o culpado, tire o snippet e o modo de depuração do ar: filtro esquecido em produção grava uma linha no log a cada carrinho.
Chamar array_filter sem callback descarta 0, '0' e false junto com os vazios. Veja o callback certo, o ARRAY_FILTER_USE_BOTH e…
O upload do tema ou do vídeo morre com 413 e o php.ini não resolve? Quem corta é o nginx:…
O cliente pediu exclusão pela LGPD mas a nota fiscal precisa ficar guardada. A saída é anonimizar o pedido, não…
504 no nginx quando a API de IA demora? Quem desiste primeiro é o nginx, não o PHP. Enfileire o…
O site caiu com erro crítico depois de atualizar um plugin e o e-mail de recuperação não chegou? Force um…
O number_format não põe o R$ nem escreve o valor por extenso. Veja como usar NumberFormatter com CURRENCY e SPELLOUT…