Suporte » Plugins » Woocommerce Frete Grátis por Produto

  • Resolvido Rafael Botelho

    (@rhenrigb)


    Boa tarde pessoal, tudo bem?

    Fiz algumas pesquisas de códigos e plugins, até mesmo nos tópicos já resolvidos do fórum, mas não encontrei uma solução.

    Eu preciso fazer que alguns produtos específicos apareça Frete Grátis, mas quando tiver algum produto no carrinho que não possua a classe de frete grátis, apareça apenas o PAC e Sedex (que são os métodos que utilizo).

    Já vinculei os produtos a uma Classe de Entrega de FRETE GRÁTIS, criei um Método de Entrega ‘Taxa Fixa’ com o “FRETE GRÁTIS” custo da classe de entrega sendo zero, mas quando vou realizar os testes, sempre aparece o FRETE GRÁTIS para todos os produtos, ele não distingue por classe.

    Agradeço a disposição de quem puder me ajudar!

Visualizando 9 respostas - 16 até 24 (de um total de 24)
  • Moderador Claudio Sanches

    (@claudiosanches)

    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.

    Criador do tópico Rafael Botelho

    (@rhenrigb)

    @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?

    ricardomasao

    (@ricardomasao)

    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 6 anos, 12 meses 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 6 anos, 11 meses atrás por jailsonito. Razão: [Resolvido]

    Não sondei, mas, deixo o link de um tuto que talvez ajude, espero o feedback…: http://www.webdesign.emp.br/blog/index.php/woocommerce-frete-gratis-por-produto/

    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

Visualizando 9 respostas - 16 até 24 (de um total de 24)
  • O tópico ‘Woocommerce Frete Grátis por Produto’ está fechado para novas respostas.