
Woocommerce Brasil
Quem paga SEDEX tendo frete grátis na mesma tela não fez isso de propósito: só não viu. Enquanto as duas opções ficarem lado a lado, vai continuar acontecendo. O filtro que resolve é o woocommerce_package_rates, num mu-plugin ou no functions.php do tema filho.
add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
$gratis = array();
foreach ( $rates as $id => $rate ) {
if ( 'free_shipping' === $rate->get_method_id() ) {
$gratis[ $id ] = $rate;
}
}
return $gratis ? $gratis : $rates;
}, 100, 2 ); O $rates chega com chaves do tipo free_shipping:3, onde o número é o ID da instância do método naquela zona. Por isso comparo pelo get_method_id() e não pela chave inteira: funciona em qualquer zona, sem hardcode. O return $rates no final evita deixar o carrinho sem opção nenhuma quando não há frete grátis. A prioridade 100 me põe depois dos plugins de correio, que registram as taxas na prioridade padrão.
É aqui que todo mundo acha que o código não pegou. O WooCommerce guarda o cálculo na sessão do visitante, numa chave feita do hash do pacote mais uma versão de transient. Enquanto essa versão não muda, ele devolve o valor velho sem chamar o seu filtro:
cd /var/www/rogertakemiya.com.br/html
sudo -u www-data wp eval 'WC_Cache_Helper::get_transient_version( "shipping", true );' O segundo argumento em true gera uma versão nova e invalida todos os pacotes de frete em cache de uma vez. Depois teste em janela anônima, porque a sua sessão antiga também segura os valores. No painel o que chega perto é WooCommerce, Status, Ferramentas, Limpar sessões de clientes — mas essa ferramenta apaga os carrinhos de quem estiver na loja naquele momento.
Um cuidado antes de subir pra produção: retirada na loja usa o método local_pickup e vai sumir junto. Se a loja oferece retirada, aceite os dois no if, senão você troca um problema por uma reclamação no WhatsApp.
A barra de upload chega no fim e o WordPress devolve só "Erro HTTP". Separe as três causas: Imagick barrado…
The author stylesheet specified in tag 'style amp-custom' is too long? Meça o bloco com curl e tire da fila…
debug.log crescendo em gigabytes com avisos de propriedade dinâmica. Veja como isolar o plugin culpado, corrigir a classe e silenciar…
O before ou around declarado no di.xml nunca dispara. Confira o Interceptor em generated e descarte as três causas que…
VPS de 2 GB onde o mysqld morre de madrugada e o site volta com erro de conexão. Como confirmar…
Regex com cinco parênteses e ninguém lembra se a data é $matches[2] ou $matches[3]. Nomeie os grupos e leia o…