Oferecer desconto no preço do frete do WooCommerce

O preço do frete é um ponto crucial em e-commerce. Mesmo que o produto seja mais barato, se o frete for caro muitas vezes você acaba perdendo o cliente para uma loja mais conhecida.

Por isso, em muitos casos pode ser interessante oferecer descontos nos valores do frete e dividir esse custo com o cliente, ou cobrar dele apenas uma porcentagem.

Abaixo deixo dois exemplos de código que exemplificam isso:

No primeiro, todos os métodos de envio estão com 50% de desconto (valor original multiplicado por 0.5). No segundo, apenas o método flat_rate possui o desconto. Você pode substituir por qualquer cálculo ou ID do método. No caso do PAC, por exemplo, o ID seria correios_pac.

Onde colocar este código?

Não sabe como utilizar códigos personalizados no seu site? Veja este tutorial que mostro como fazer isso de maneira correta e fácil.

28 comentários em “Oferecer desconto no preço do frete do WooCommerce”

  1. Muito bom! Uma mão na roda.

    Uma coisa que sinto falta, é que desse para dar “desconto” no frete, de uma forma semelhante ao funcionamento do desconto na compra.

    Por exemplo, quando tenho a opção frete grátis, gostaria que tivesse como dar desconto do valor do PAC para que ele ficasse grátis, e isso aparecesse no pedido.

    Sinto falta nos meus relatórios no Woocommerce o quanto gastei de frete com os pedidos que foram via Frete grátis.

  2. Ótima dica!
    Fernando seria possível determinar o desconto por região? Ex.: PAC e Sedex com 50% para um estado e 30% para todos os outros estados.

    1. Fernando Fresinghelli

      Olá. Sim, a lógica é a mesma, mas seria necessário programar alguns ajustes. Se você precisa de ajuda entre em contato.

  3. Incrível e sem a necessidade de plugins.

    Tem como utilizar esta mesma opção de 50% de desconto no frete, porém só se inserir um cupom de desconto?

  4. Olá Fernando! Se eu quiser mostrar um valor de frete X reais a menos do que apareceria originalmente pela simulação, eu só teria que substituir no primeiro código o trecho:
    $rate->set_cost( $cost * 0.5 ); // 0.5 = 50%

    por

    $rate->set_cost( $cost – X ); // X = R$ X

    ?

    Grato!

    1. Fernando Fresinghelli

      Olá!

      Nesse caso você precisaria personalizar com o $rate->set_label( ‘Nome personalizado incluindo o total de desconto’ );

      O set_cost que você menciona é apenas para o valor numérico. O texto exibido é o label.

      1. Muito obrigado pelo retorno! Mas a minha dúvida é, se eu quisesse dar um desconto em todos os métodos, basicamente da mesma maneira como você fez no primeiro caso citado, onde o desconto foi de 50%, mas ao invés de ser um valor em porcentagem, fosse um valor real, de por exemplo 15 reais, seria o caso de só alterar o seu primeiro código para:
        $rate ) {
        $cost = $rate->get_cost();
        // todos os métodos
        $rate->set_cost( $cost – 15 );
        $rates[ $key ] = $rate;
        }
        return $rates;
        }

        Minha intenção é dar um desconto de 15 reais no valor original de todos os métodos de frete, ao invés de uma porcentagem de desconto. Sem utilizar cupom de desconto ou desconto em método de pagamento.

        Mais um vez agradeço.

          1. Félix Henrique de Souza e Silva

            Bom dia Fernando, bom dia Daniel.

            Se no caso, dermos um desconto Fixo de R$ 30,00 no valor do Frete para qualquer região do Brasil, e aconteça do valor original do frete ser inferior ao desconto?

            Ele vai aparecer negativo? Teria como exibir Frete Grátis caso o número seja igual ou menor que zero?

          2. Fernando Fresinghelli

            Olá, Félix!

            O WooCommerce mesmo cuida dessa parte. Se o frete custa R$ 20 e o desconto é R$ 100, ele ficará grátis e não negativo.

    1. Fernando Fresinghelli

      Olá. Este código funciona normalmente na última versão do WooCommerce.
      Vale salientar que na primeira opção o valor se aplica a todos os métodos e no outro somente taxa fixa.

  5. Fernando, tudo bom cara?
    Seguinte, preciso adaptar uma Porcentagem de desconto para Região Norte e Nordeste. Fiz a separação já nas configurações do WC e eu utilizo a segunda opção para poder oferecer esse desconto?

    Estou pensando ainda se coloco Porcentagem ou Valor Fixo, mas quero dar um desconto especial para essa região do país. Teria como?
    E colocar a parte informando que estou oferecendo esse desconto na listagem, seria pelo Label né?

    1. Fernando Fresinghelli

      Oi, Victor! De ser possível, é! Mas ali na segunda opção não valida os estados que você quer.

      Você pode modificar isso com a variável $package.

  6. Fala Fernando!

    E se eu quisesse cobrar o frete somente de um produto?
    Ex: O cliente comprou 3 celulares mas quero que ele só pague o frete de 1.

    Como seria? Abraço!

    1. Fernando Fresinghelli

      Nesse caso seria necessário várias personalizações, iria requerer mais código personalizado. Mas é possível também. Tem que pensar melhor, mas talvez a melhor forma seja você verificar quantos produtos tem e considerar as dimensões de um só, mas em outro local, não nesse filtro. no filtro woocommerce_package_rates

  7. Bom dia , utilizo o plugin do melhor envio , e gostaria de saber como faço para colocar desconto em % somente nos metodos de correios pac e sedex (Excluindo as transportadoras) , se puder me ajudar saberia como ativar o metodo do mercado envios , ja utilizo o pagamento do mercado pago, ativo o mercado envios mais ele nao funciona.
    desde já agradeço

    1. Fernando Fresinghelli

      Olá,
      Para oferecer desconto apenas nos Correios você precisará saber o ID dos métodos e modificá-lo depois conforme o artigo.

      Em relação ao Mercado Envios, recomendo confirmar com eles se ainda está disponível, eu vi algumas pessoas comentando que este recurso foi removido para lojas externas (caso do WooCommerce). Se eles responderem que ainda existe, você pode entrar em contato para tentar encontrar a solução.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *