O código esta ai galera, se não esta funcionando é porque algo foi feito errado no siet de vocês ou não usam o WooCommerce atualizado.
Sobre as outras perguntas, com esse código ai de base da para fazer qualquer outra coisa, basta usar a criatividade.
Cláudio, eu testei seu código e funcionou, porém quando colo um produto que não tem frete grátis, ele retorna a seguinte mensagem no campo do frete
Não existe nenhum método de entrega disponível. Por favor, certifique-se de que o seu endereço está correto ou entre em contato conosco caso você precise de ajuda.
Print:
Configuração do frete: https://snag.gy/xcVSMk.jpg
Fiz alguns testes e percebi que:
1) O código que você passou funciona perfeitamente, desde que você configure de forma correta o frete. O que é a forma correta? Tem que configurar com frete grátis e não taxa fixa.
2) Ele precisa ficar na primeira posição, se ele ficar abaixo das outras opções de frete, ele não funciona. Como mostra a imagem: https://snag.gy/xcVSMk.jpg
3) Quando é adicionado um segundo produto no carrinho, que não possui a classe de entrega (Frete Grátis) ele mostra a seguinte mensagem (Não existe nenhum método de entrega disponível. Por favor, certifique-se de que o seu endereço está correto ou entre em contato conosco caso você precise de ajuda.)
Print da mensagem: https://snag.gy/kaVSxP.jpg
4) Se eu altero a ordem das áreas de entregas e coloco o FRETE NORMAL em primeiro, ele não mostra o frete grátis. Se coloco depois do FRETE GRÁTIS, ele apresenta essa mensagem que não existe nenhum método de entrega.
Obrigado pela atenção de vocês.
@thejhunior12 e @claudiosanches obrigado!
Funcionou conforme o código e as instruções de vocês.
No meu fica Frete Grátis para todos Produtos, como resolver?
Peguei a função do Cláudio e dei uma mudada rápida para, se todos os produtos possuir a classe frete-gratis, aparecer apenas o frete grátis. Pois não havia sentido aparecer o frete grátis e continuar aparecendo as outras forma de envio.
Ou estou enganado?
Segue a função modificada.
// Adiciona frete grátis apenas se o produto conter a classe frete-gratis
// Por Claudio Sanches
function my_wc_free_shipping_by_shipping_class( $rates, $package ) {
$shipping_class = 'frete-gratis'; // Slug da sua classe de entrega.
$allow_free_shipping = true;
// Verifica se todos os produtos precisam ser entregues e se possuem a class de entrega selecionada.
foreach ( $package['contents'] as $value ) {
$product = $value['data'];
if ( $product->needs_shipping() && $shipping_class !== $product->get_shipping_class() ) {
$allow_free_shipping = false;
break;
}
}
// Remove a entrega gratuita se algum produto não possuir a classe de entrega selecionada.
// Caso todos os produtos possuir frete-gratis, remover todos as formas de entrega deixando apenas o frete grátis.
if ( ! $allow_free_shipping ) {
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
unset( $rates[ $rate_id ] );
break;
}
}
} else {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
$rates = $free;
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'my_wc_free_shipping_by_shipping_class', 100, 2 );
Olá, @claudiosanches, Eu adicionei um metódo de entrega com “Frete Grátis” que vale apenas dentro da minha cidade. Pois bem, acontece que eu gostaria que a mensagem “Frete grátis” aparecesse somente depois que o cliente clicasse em “calcular frete”. Eu tenho também outras opções de frete como PAC e SEDEX, e todas elas com seus respectivos custos só aparecem depois que o cliente clica em “calcular frete”. Assim eu gostaria que fosse também com o “Frete Grátis”. Obrigado, desde já por me ajudar.
-
Esta resposta foi modificada 8 anos atrás por
ceslad.
[Resolvido funcionou]
@ricardomasao Seu código ñ funcionou aqui, continuou igual ao do @claudiosanches aparecendo todos os métodos de entrega.
Mas de qualquer forma muito Obrigado!
-
Esta resposta foi modificada 8 anos atrás por
jailsonito. Razão: [Resolvido]
Eu criei o metodo de entrega frete gratis para um determinado cep. qdo clico em calcular frete na pagina de produto e coloco a faixa de frete gratis mesmo assim ele so mostra o sedex. como resolvo isso ? obrigado