Cada vez es más habitual en las tiendas online, ofrecer un descuento o comisión en el método de pago. En este blog ya hemos visto como añadir una comisión a cualquier método pero no un descuento.
En este tutorial veremos un plugin gratuito para poder hacerlo o bien mediante código en formas de pago comunes como PayPal, Bizum, Stripe, transferencia bancaria…
Índice
ELEX WooCommerce Discount Per Payment Method
Con este plugin gratuito disponible en el repositorio oficial de WordPress o haciendo clic aquí. Podremos hacer un descuento personalizado. Para ello nos vamos a WooCommerce > Ajustes > ELEX WooCommerce Discount Per Payment Method y elegimos el método de pago y el descuento en porcentaje:

Tan sencillo como se puede apreciar en la foto. Luego iremos al checkout para comprobar que de verdad funciona:

Si se te queda un poco escaso este plugin, tienes uno más potente gratuito: Payment Gateway Based Fees and Discounts for WooCommerce. Sirve para descuentos fijos y puede añadir comisiones también.
Por otro lado, si lo quieres hacer por código para no tener tantos plugins:
Mediante código
El código que te voy a presentar a continuación, tienes que modificarlo para el método de pago que quieras, el % o tasa de comisión y forma de descuento. Para añadir este código, como siempre nos vamos al fichero functions.php de nuestro Child Theme o bien a nuestro plugin de funcionalidades como explico aquí.
Descuento por porcentaje:
add_action( 'woocommerce_cart_calculate_fees','dl_anadir_descuento_pagos', 20, 1 );
function dl_anadir_descuento_pagos( $cart_object ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
$label_text=__("");
$percent=0;
// Para varios metodos PayPal, transferencia...
$cart_total = $cart_object->subtotal_ex_tax;
$chosen_payment_method = WC()->session->get('chosen_payment_method'); //Get the selected payment method
if( $chosen_payment_method == "paypal" ){
$label_text = __( "Descuento de PayPal" );
// The percentage to apply
$percent = 1; // 1%
}
else if( $chosen_payment_method == "bacs"){
$label_text = __( "Descuento transferencia bancaria" );
// The percentage to apply
$percent = 2; // 2%
}
else {
$label_text = __( "Contra Reembolso" );
// The percentage to apply
$percent = 0; // 0%
}
// Calculating percentage
$discount = number_format(($cart_total / 100) * $percent, 2);
// Adding the discount
$cart_object->add_fee( $label_text, -$discount, false );
}
add_action( 'woocommerce_review_order_before_payment', 'dl_actualizar_metodo_pago_1' );
function dl_actualizar_metodo_pago_1(){
// jQuery
?>
<script type="text/javascript">
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
$('body').trigger('update_checkout');
});
})(jQuery);
</script>
<?php
}
Por otro lado si lo queremos es valor fijo:
add_action( 'woocommerce_cart_calculate_fees','dl_anadir_descuento_pagos_fijos', 20, 1 );
function dl_anadir_descuento_pagos_fijos( $cart_object ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
$label_text=__("");
$discount_amount=0;
// Metodo de pago como PayPal, transferencia bancaria
$cart_total = $cart_object->subtotal_ex_tax;
$chosen_payment_method = WC()->session->get('chosen_payment_method'); //Seleccion de pago
if( $chosen_payment_method == "paypal" ){
$label_text = __( "Descuento PayPal" );
// El importe fijo de descuento
$discount_amount = 2;
}
else if( $chosen_payment_method == "bacs"){
$label_text = __( "Descuento transferencia bancaria" );
// El importe fijo de descuento
$discount_amount = 15;
}
else {
$label_text = __( "Descuento Contra Reembolso" );
// El importe fijo de descuento
$discount_amount = 0;
}
// Anadir descuento
$cart_object->add_fee( $label_text, -$discount_amount, false );
}
add_action( 'woocommerce_review_order_before_payment', 'dl_actualizar_metodo_pago_2' );
function dl_actualizar_metodo_pago_2(){
// jQuery
?>
<script type="text/javascript">
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
$('body').trigger('update_checkout');
});
})(jQuery);
</script>
<?php
}
Esto sería todo por el tutorial de hoy, cualquier duda como siempre en comentarios.
Deja una respuesta