✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Como adicionar programaticamente um desconto personalizado ao WooCommerce Checkout

37

Neste post, veremos como adicionamos descontos de forma programática e automática. Para fazer isso, utilizamos a funcionalidade de cupom do WooCommerce, mas a tornamos automática e ocultamos o fato de que é um cupom para os clientes. Tentei manter o código o mais geral possível, pois as condições de aplicação de descontos podem variar muito para quem lê isso.

Por que os cupons são a maneira de fazer isso

Nas versões mais antigas do WooCommerce, tínhamos algumas opções ("hackish") para adicionar descontos com código, por exemplo, fornecer um número negativo add_fee()ou trabalhar com get_discounted_price(). Infelizmente, esses métodos não funcionam mais ou são considerados legados e serão removidos em versões posteriores. A maneira estruturalmente boa de adicionar descontos é usar a funcionalidade de cupom integrada no WooCommerce.

No entanto, um cupom geralmente não pode ser aplicado automaticamente a um carrinho. Ele exige que o cliente digite manualmente um código de cupom que ele ou ela deve ter recebido. Em algumas lojas online você só quer um desconto aplicado automaticamente quando uma determinada condição for atendida sem que o cliente tenha que fazer nada. Isso é o que vamos corrigir usando código.

Descontos personalizados com cupons

Você precisará criar um cupom com um código e configurá-lo com os parâmetros que desejar. Você poderá aplicá-lo, removê-lo e alterar diferentes saídas onde quer que o cupom esteja visível para o cliente. Opcionalmente, se você não quiser cupons disponíveis para clientes em sua loja virtual, veremos alguns truques simples para ocultar as opções de inserção manual de códigos de cupom.

No exemplo de código abaixo, estou agrupando todo o código relacionado em uma classe PHP. Isso ajuda para um código mais limpo, mas é especialmente útil porque queremos fazer referência ao código do cupom várias vezes. Defini-la como uma variável de classe é melhor do que repeti-la em várias funções.

Crie seu desconto como um cupom

O primeiro passo é criar o cupom que será o “placeholder" do seu desconto. O mais fácil é simplesmente criar um no administrador do WooCommerce (WooCommerce > Coupons > Add Coupon).

Se você quiser criar o cupom programaticamente, um cupom é na verdade uma postagem com a qual você pode criar wp_insert_post()– mas você precisa ter o cuidado de criar sua postagem de cupom apenas uma vez. WooCommerce tem um pequeno guia sobre como criar um cupom programaticamente.

Forneça um slug exclusivo como seu código de cupom e, no mínimo, configure o valor do desconto (uma porcentagem ou taxa fixa). Quanto ao exemplo de código abaixo, criei um código de cupom ‘ example‘ (recomendo usar um nome mais criativo e adequado para o seu).

Criando a classe PHP que conterá todo o nosso código

Vamos finalmente à codificação! Você pode definir esta classe diretamente dentro do seu tema functions.php, código de plugin ou um arquivo separado incluído.

class AWPCustomDiscount { private $coupon_code = 'example';   public function __construct() {   } } new AWPCustomDiscount();

Nomeie sua classe como quiser e substitua a variável $coupon_codede classe pelo nome que você deu ao seu cupom. Não se esqueça de inicializar a classe depois no final (new AWPCustomDiscount()).

Se você programou orientação a objetos antes, isso deve ser familiar para você. Se não, não se preocupe, isso deve ser simples de seguir. Adicionaremos algumas funções aqui e nos referiremos ao código do cupom com $this->coupon_code. Vamos começar com o código responsável por realmente adicionar o cupom quando as condições forem atendidas.

Aplicando cupom programaticamente

Por experiência, aprendi que ligar o código para aplicar e remover cupons funciona melhor e de forma mais consistente usando os dois ganchos a seguir; um para o carrinho (woocommerce_before_cart) e outro para o checkout (woocommerce_before_checkout_form).

Dentro da função, tudo o que precisamos fazer é verificar as condições que queremos. WooCommerce oferece funções para obter o objeto do carrinho with WC()->cartque podemos usar para obter todas as informações que precisamos sobre o carrinho, como seus itens e totais. Como exemplo, o código abaixo aplicará um desconto se o total do carrinho (excluindo quaisquer descontos) estiver acima de um determinado valor.

Devemos também garantir que se as condições não forem atendidas, devemos remover o desconto se tiver sido adicionado anteriormente. No nosso exemplo, imagine que o cliente ultrapassou o valor máximo, mas depois foi ao carrinho, retirou alguns itens e assim voltou a ficar abaixo do valor exigido. Como os cupons não são aplicados automaticamente, todos os cupons aplicados também precisam ser removidos programaticamente.

Usandoapply_coupon

Os cupons são adicionados ao objeto do carrinho apply_coupon()fornecendo o código do cupom como parâmetro e são removidos do objeto do carrinho remove_coupon()com o código do cupom como parâmetro. Simples o suficiente. Também podemos usar a função tão apropriadamente nomeada get_applied_coupons()no objeto carrinho para verificar se nosso cupom já foi aplicado.

Se você não estiver familiarizado com o uso de PHP orientado a objetos no WordPress; aqui está um breve resumo de como o acima funciona: A __construct()função será executada sempre que a classe for inicializada, o que fazemos imediatamente após a classe. Dentro __construct(), você normalmente adicionará todos os ganchos como faria normalmente, por exemplo, dentro de functions.php. Para que o WordPress encontre nossas funções dentro de nossa classe, precisamos dizer ao gancho para se referir a uma função definida em uma matriz que consiste em $this(o objeto de classe) e o nome da função.

Dentro da função addDiscount()programamos em nossas condições. No exemplo acima eu busco o total do carrinho usando WC()->cart->get_subtotal()e comparo com as minhas condições – sendo acima de 500.

Observação: se você precisar buscar e comparar os totais do carrinho, saiba que a maioria dos totais inclui cupons. Por exemplo, o mais familiar WC()->cart->get_cart_contents_total()devolverá o total antes do envio, mas inclui descontos; o que significa que, se seu desconto já foi aplicado anteriormente, esse total estará errado para comparação.

Você pode chamar apply_coupon()sem verificar se o cupom já foi aplicado (a ifverificação na linha #14), porque a própria função apply_coupon()se certificará de não adicioná-lo novamente se tiver sido aplicado antes. No entanto, esta ifverificação evita que o cliente receba uma mensagem de erro dizendo “O cupom já foi aplicado” toda vez que o carrinho for atualizado.

É assim que seu desconto aparecerá nos totais do carrinho no carrinho e na finalização da compra:

Como adicionar programaticamente um desconto personalizado ao WooCommerce Checkout

Suas condições de desconto

As condições do seu cupom dependem inteiramente de você e de suas necessidades. Configurei alguns exemplos de condições para adicionar uma taxa personalizada em uma postagem anterior – por exemplo, dependendo do local de envio ou de quais produtos estão no carrinho. Você também pode comparar a data de hoje se quiser dar um desconto especial de Natal ou Halloween, ou dar um desconto com base nas condições do cliente conectado.

Se preferir aplicar o cupom dependendo das configurações definidas no próprio cupom – por exemplo, excluir ou incluir determinados IDs de produtos, você também pode fazê-lo. Você pode instanciar um objeto do cupom a partir do código do cupom, assim:

Com esse objeto de cupom, você tem acesso a todas as funções para buscar quaisquer configurações definidas no cupom. Por exemplo, obter IDs de produtos que devem ser incluídos no cupom:

Consulte a documentação da classe WC_Coupon para ver como você pode obter o que precisa.

Corrigir o rótulo visível do cupom

O cupom já deve ser adicionado e removido quando seu carrinho atender ou não atender às suas condições definidas em addDiscount(). No entanto, na tabela de totais, tanto no carrinho quanto no checkout, o desconto é exibido como “Cupom: exemplo” (ou qualquer que seja o código do seu cupom). Isso não é bom! Felizmente, é fácil alterar esse rótulo usando o filtro woocommerce_cart_totals_coupon_label. Vamos adicionar o filtro ao nosso __construct()e definir uma função:

Com o filtro temos acesso ao objeto cupom como segundo parâmetro. Com o objeto de cupom, podemos verificar sua propriedade, code, se corresponde ou não ao nosso código de cupom personalizado. Se sim, devolvemos o rótulo que quisermos. Ajuste a saída da etiqueta para o que você quiser. Caso contrário, devolvemos o rótulo do cupom padrão.

Remover a opção do usuário para remover o desconto

Outra coisa que você deve ter notado na exibição do nosso desconto no carrinho e no checkout é que ele recebeu um link “[Remover]” após o valor. Este é o comportamento padrão dos cupons no WooCommerce, mas para o nosso caso não é desejável. Tanto porque pode confundir os clientes quanto porque nosso código o reaplicaria após a remoção.

WooCommerce fornece o filtro woocommerce_cart_totals_coupon_htmlpara a saída do valor. Felizmente, o WooCommerce fornece a saída HTML apenas do valor em si como terceiro parâmetro para esse filtro. Podemos simplesmente devolver isso em vez de garantir que nosso desconto seja apresentado corretamente com moeda e tudo mais.

Opcional: ocultar a funcionalidade do cupom para os clientes

Os cupons devem ser ativados no WooCommerce para que nossa funcionalidade de desconto funcione, mas esteja ciente de que isso adicionará a opção para os clientes inserirem manualmente os códigos de cupom no carrinho e no checkout. Se você não quiser mostrar que sua loja virtual tem a funcionalidade de cupom e, especialmente, não permitir que os clientes insiram códigos de cupom manualmente, você também pode fazer isso.

Removendo do checkout

Remover a funcionalidade de cupom do checkout é fácil e pode ser feito dentro da nossa classe. Simplesmente removemos o gancho que renderiza a “caixa” do cupom, assim:

... public function __construct() { add_action('woocommerce_before_cart', [$this, 'addDiscount']); add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']); add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2); add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3); remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10); } ...

Removendo do carrinho

A remoção da funcionalidade do código de cupom no carrinho infelizmente não é tão fácil, pois isso é codificado em um modelo. Você precisará substituir o modelo de carrinho do WooCommerce para remover a funcionalidade do cupom. Copie o arquivo pluginswoocommercetemplatescartcart.phpem your-themewoocommercecartcart.php.

Os arquivos de modelo do WooCommerce estão mudando constantemente, portanto, fornecer um número de linha exato não ajudaria. Mas você encontrará o código que gera a entrada e o botão do cupom próximo ao final do arquivo; parecendo mais ou menos assim:

O que você precisa fazer é comentar a saída relacionada ao cupom. Eu recomendo adicionar um comentário PHP /*logo antes do if-check e fechá-lo */logo após o colchete de fechamento. Igual a:

Neste ponto, a funcionalidade de cupom da sua loja virtual deve estar praticamente oculta para os clientes! Mas seu desconto personalizado deve funcionar perfeitamente bem.

Fonte de gravação: awhitepixel.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação