Como adicionar cobranças ou descontos para diferentes métodos de pagamento no WooCommerce
Publicados: 2019-03-26Vemos em sites de comércio eletrônico que, a cada método de pagamento que você escolhe no checkout, geralmente há uma taxa de serviço ou até um desconto associado. Ressalta-se também que a taxa de serviço para Pagamento na Entrega é maior do que para métodos alternativos de pagamento. Isso é para aumentar as chances de pré-pagamentos. Os pré-pagamentos ajudam não apenas a reduzir o risco de não ser pago pelo cliente, mas também a garantir o fluxo de caixa do negócio. No caso de não haver taxa de serviço associada aos métodos de pagamento, pode haver descontos oferecidos quando você optar por pagar com métodos diferentes do Pagamento na Entrega.
Você também pode adicionar descontos em determinados métodos de pagamento, dependendo dos esquemas ou promoções que deseja executar. Os descontos são atrativos em geral para os clientes e ajudam no aumento das vendas. Neste post, mostraremos as várias maneiras de adicionar cobranças ou descontos para diferentes métodos de pagamento no WooCommerce e, consequentemente, obter benefícios do mesmo.
Adicionando descontos percentuais para diferentes métodos de pagamento por meio de trechos de código
Você pode conseguir isso adicionando trechos de código no arquivo functions.php do seu tema filho.
O código abaixo adiciona um desconto ao valor total quando o PayPal é escolhido como método de pagamento na página de checkout do WooCommerce. Ao atribuir um valor a $percent, você pode especificar a porcentagem de desconto que deseja aplicar na forma de pagamento desejada. Os métodos de pagamento padrão no WooCommerce são Transferência Bancária Direta (bacs), Pagamentos por Cheque (cheque), Dinheiro na Entrega (cod) e PayPal (paypal), com seus ids mencionados entre colchetes.
add_action( 'woocommerce_cart_calculate_fees','ts_add_discount', 20, 1 ); function ts_add_discount( $cart_object ) { if ( is_admin() && !defined( 'DOING_AJAX' ) ) return; // Mencione a forma de pagamento ex: cod, bacs, cheque ou paypal $payment_method = 'paypal'; // A porcentagem a ser aplicada $ por cento = 2; // 2% $cart_total = $cart_object->subtotal_ex_tax; $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pega a forma de pagamento selecionada if( $payment_method == $chosen_payment_method ){ $label_text = __("Desconto do PayPal"); // Calculando a porcentagem $desconto = number_format(($cart_total / 100) * $percent, 2); // Adicionando o desconto $cart_object->add_fee( $label_text, -$discount, false); } } add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' ); function ts_refresh_payment_method(){ // jQuery ?> <script type="text/javascript"> (função($){ $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() { $('body').trigger('update_checkout'); }); })(jQuery); </script> <?php }
Você precisará de duas funções aqui - uma para fazer o trabalho de adicionar descontos ou taxas apropriadas e outra para manter uma guia sobre as alterações na seleção do método de pagamento pelo usuário, para o qual usamos javascript. Os ganchos woocommerce_cart_calculate_fees e woocommerce_review_order_before_payment são usados para adicionar essas duas funções, respectivamente.
Os valores que os métodos de pagamento têm para Transferência Bancária Direta, Cheque, Contra-Reembolso e PayPal são bacs , cheque , cod e paypal respetivamente. A função add_fee() é um método embutido da classe WC_Cart no WooCommerce.
Isso resultará na dedução do valor do desconto do subtotal e o total será exibido:
Com poucas modificações, você pode mencionar descontos para várias formas de pagamento no mesmo snippet de código:
add_action( 'woocommerce_cart_calculate_fees','ts_add_discount', 20, 1 ); function ts_add_discount( $cart_object ) { if ( is_admin() && !defined( 'DOING_AJAX' ) ) return; $label_text=__(""); $%=0; // Mencione a forma de pagamento ex: cod, bacs, cheque ou paypal $cart_total = $cart_object->subtotal_ex_tax; $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pega a forma de pagamento selecionada if( $chosen_payment_method == "paypal" ){ $label_text = __("Desconto do PayPal"); // A porcentagem a ser aplicada $ por cento = 2; // 2% } else if( $chosen_payment_method == "bacs"){ $label_text = __("Desconto de transferência bancária direta"); // A porcentagem a ser aplicada $ por cento = 3; // 3% } else if( $chosen_payment_method == "cheque"){ $label_text = __("Desconto no pagamento do cheque"); // A porcentagem a ser aplicada $ por cento = 2; // 2% } senão { $label_text = __("Desconto na entrega"); // A porcentagem a ser aplicada $ por cento = 0; // 0% } // Calculando a porcentagem $desconto = number_format(($cart_total / 100) * $percent, 2); // Adicionando o desconto $cart_object->add_fee( $label_text, -$discount, false); } add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' ); function ts_refresh_payment_method(){ // jQuery ?> <script type="text/javascript"> (função($){ $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() { $('body').trigger('update_checkout'); }); })(jQuery); </script> <?php }
Adicionando valores de desconto fixos para diferentes métodos de pagamento por meio de trechos de código
Suponha que você queira mencionar um valor em vez de uma porcentagem. Você pode fazer isso usando o mesmo snippet novamente, eliminando a etapa em que calcula a porcentagem e aceitando o valor do desconto como entrada com base em cada forma de pagamento:
add_action( 'woocommerce_cart_calculate_fees','ts_add_discount', 20, 1 ); function ts_add_discount( $cart_object ) { if ( is_admin() && !defined( 'DOING_AJAX' ) ) return; $label_text=__(""); $discount_amount=0; // Mencione a forma de pagamento ex: cod, bacs, cheque ou paypal $cart_total = $cart_object->subtotal_ex_tax; $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pega a forma de pagamento selecionada if( $chosen_payment_method == "paypal" ){ $label_text = __("Desconto do PayPal"); // O valor do desconto a ser aplicado $discount_amount = 200; } else if( $chosen_payment_method == "bacs"){ $label_text = __("Desconto de transferência bancária direta"); // O valor do desconto a ser aplicado $discount_amount = 150; } else if( $chosen_payment_method == "cheque"){ $label_text = __("Desconto no pagamento do cheque"); // O valor do desconto a ser aplicado $discount_amount = 100; } senão { $label_text = __("Desconto na entrega"); // O valor do desconto a ser aplicado $desconto_quantia = 0; } // Adicionando o desconto $cart_object->add_fee( $label_text, -$discount_amount, false); } add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' ); function ts_refresh_payment_method(){ // jQuery ?> <script type="text/javascript"> (função($){ $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() { $('body').trigger('update_checkout'); }); })(jQuery); </script> <?php }

Para adicionar uma taxa de serviço, basta alterar o sinal de um dos argumentos na função add_fee de “-” para “+” ou nenhum sinal, o que implica positivo.
add_action( 'woocommerce_cart_calculate_fees','ts_add_discount', 20, 1 ); function ts_add_discount( $cart_object ) { if ( is_admin() && !defined( 'DOING_AJAX' ) ) return; $label_text=__(""); $service_charge=0; // Mencione a forma de pagamento ex: cod, bacs, cheque ou paypal $cart_total = $cart_object->subtotal_ex_tax; $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pega a forma de pagamento selecionada if( $chosen_payment_method == "paypal" ){ $label_text = __("Taxa de serviço do PayPal"); // A taxa de serviço a ser aplicada $service_charge=200; } else if( $chosen_payment_method == "bacs"){ $label_text = __( "Cobrança de Serviço de Transferência Bancária Direta" ); // A taxa de serviço a ser aplicada $service_charge=100; } else if( $chosen_payment_method == "cheque"){ $label_text = __("Taxa de serviço de pagamento de cheque"); // A taxa de serviço a ser aplicada $service_charge=150; } senão { $label_text = __("Taxa de serviço à cobrança"); // A taxa de serviço a ser aplicada $service_charge=250; } // Adicionando a taxa de serviço $cart_object->add_fee( $label_text, $service_charge, false); } add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' ); function ts_refresh_payment_method(){ // jQuery ?> <script type="text/javascript"> (função($){ $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() { $('body').trigger('update_checkout'); }); })(jQuery); </script> <?php }
Desta forma, será aplicada uma taxa de serviço de acordo com a forma de pagamento selecionada:
Adicionando descontos para diferentes métodos de pagamento apenas para usuários logados (via trechos de código)
Se você deseja oferecer esses descontos apenas para usuários logados (conforme solicitado através de um comentário neste post), basta adicionar uma condição que verifique se o usuário está logado ou não. Isso pode ser feito pela função is_user_logged_in() . O snippet de código abaixo mostra como você pode adicionar descontos percentuais para uma forma de pagamento específica apenas para usuários conectados.
add_action( 'woocommerce_cart_calculate_fees','ts_add_discount', 20, 1 ); function ts_add_discount( $cart_object ) { if ( is_admin() && !defined( 'DOING_AJAX' ) ) return; if (is_user_logged_in()){ // Mencione a forma de pagamento ex: cod, bacs, cheque ou paypal $payment_method = 'paypal'; // A porcentagem a ser aplicada $ por cento = 2; // 2% $cart_total = $cart_object->subtotal_ex_tax; $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pega a forma de pagamento selecionada if( $payment_method == $chosen_payment_method ){ $label_text = __("Desconto do PayPal"); // Calculando a porcentagem $desconto = number_format(($cart_total / 100) * $percent, 2); // Adicionando o desconto $cart_object->add_fee( $label_text, -$discount, false); } } } add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' ); function ts_refresh_payment_method(){ // jQuery ?> <script type="text/javascript"> (função($){ $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() { $('body').trigger('update_checkout'); }); })(jQuery); </script> <?php }
Você pode usar qualquer um dos trechos de código nesta postagem, dependendo de sua necessidade. Você precisa simplesmente adicionar uma condição- if (is_user_logged_in()) dentro desse trecho de código se quiser restringir isso apenas aos usuários logados.
Adicionando cobranças ou descontos para diferentes métodos de pagamento via plugins
Se você não quiser adicionar trechos de código, existe uma maneira fácil de conseguir o mesmo – plugins! Existem plugins gratuitos e pagos que oferecem recursos diferentes.
Taxas e descontos baseados em gateway de pagamento para WooCommerce
Este é um plugin gratuito nosso que permite adicionar taxas, descontos, impostos etc. e ainda definir os valores mínimo e máximo do carrinho como critério para o mesmo. Você pode até arredondar a taxa depois de aplicar o desconto. E você pode fazer tudo isso com uma interface fácil de usar acessível através do painel:- Descontos por método de pagamento para WooCommerce (gratuito)
Este é um plugin gratuito da WPCodelibrary que fornece uma interface simples dentro do seu painel do WordPress para definir descontos para os métodos de pagamento padrão fornecidos pelo WooCommerce. No entanto, não possui um recurso para adicionar taxas ou taxas de serviço.
- Taxas e descontos baseados em gateway de pagamento para WooCommerce (US $ 39)
Este plugin premium por nós vem com um conjunto completo de recursos onde você pode adicionar taxas e descontos para diferentes métodos de pagamento com base no país, estado, categoria de produto etc. Além disso, você também pode aplicar impostos sobre as taxas (excluindo despesas de envio ) usando o plug-in. A interface é simples e fácil de usar, e você também pode aplicar descontos e taxas diferentes para produtos individuais.