Cómo agregar cargos o descuentos para diferentes métodos de pago en WooCommerce

Publicado: 2019-03-26

Vemos en los sitios web de comercio electrónico que con cada método de pago que elige al pagar, a menudo hay un cargo por servicio o incluso un descuento asociado. También cabe destacar que el cargo por servicio de Pago contra reembolso es más alto que el de los métodos de pago alternativos. Esto es para aumentar las posibilidades de pre-pagos. Los prepagos ayudan no solo a reducir el riesgo de que el cliente no le pague, sino también a garantizar el flujo de efectivo en el negocio. En caso de que no haya una tarifa de servicio asociada con los métodos de pago, es posible que se ofrezcan descuentos cuando elija pagar con métodos que no sean contra reembolso.

También es posible que desee agregar descuentos contra ciertos métodos de pago según los esquemas o promociones que desee ejecutar. Los descuentos son atractivos en general para los clientes y ayudan a aumentar las ventas. En esta publicación, le mostraremos las diversas formas en que puede agregar cargos o descuentos para diferentes métodos de pago en WooCommerce y, en consecuencia, obtener beneficios de los mismos.

Adición de porcentajes de descuento para diferentes métodos de pago a través de fragmentos de código

Puede lograr esto agregando fragmentos de código en el archivo functions.php de su tema hijo.

El siguiente código agrega un descuento al monto total cuando se elige PayPal como método de pago en la página de pago de WooCommerce. Al asignar un valor a $percent, puede especificar el porcentaje de descuento que desea aplicar en el método de pago deseado. Los métodos de pago predeterminados en WooCommerce son transferencia bancaria directa (bac), pagos con cheque (cheque), pago contra reembolso (cod) y PayPal (paypal), con sus identificaciones mencionadas entre paréntesis.

 add_action('woocommerce_cart_calculate_fees','ts_add_discount', 20, 1);

función ts_add_discount ($cart_object) {

    if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;

    // Mencione el método de pago, por ejemplo, cod, bacs, cheque o paypal
    $método_de_pago = 'paypal';

    // El porcentaje a aplicar
    $porcentaje = 2; // 2%

    $cart_total = $cart_object->subtotal_ex_tax;
    
    $método_de_pago_elegido = WC()->sesión->get('método_de_pago_elegido'); //Obtener el método de pago seleccionado

    if( $método_de_pago == $método_de_pago_elegido){
        
                   $etiqueta_texto = __( "Descuento de PayPal");
        
                   // Calculando porcentaje
                   $descuento = numero_formato(($cart_total / 100) * $porcentaje, 2);
        
                   // Agregando el descuento
                   $cart_object->add_fee( $label_text, -$discount, false );
    }
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');

función ts_refresh_pago_método(){
    // jQuery
    ?>
    <script tipo="texto/javascript">
        (función ($){
            $( 'formulario.pago' ).on( 'cambiar', 'entrada[nombre^="método_de_pago"]', función() {
                $('cuerpo').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

Necesitará dos funciones aquí: una para hacer el trabajo de agregar descuentos o tarifas apropiados, y otra para controlar los cambios en la selección del método de pago por parte del usuario, para lo cual usamos javascript. Los ganchos woocommerce_cart_calculate_fees y woocommerce_review_order_before_payment se utilizan para agregar estas dos funciones respectivamente.

Los valores que tienen los métodos de pago para Transferencia Bancaria Directa, Cheque, Contra Reembolso y PayPal son bac , cheque , cod y paypal respectivamente. La función add_fee() es un método integrado de la clase WC_Cart en WooCommerce.

Esto dará como resultado que el monto del descuento se deduzca del subtotal y, por lo tanto, se mostrará el total:

Discount percentage applied - add charges or discounts for different payment methods in WooCommerce

Con pocas modificaciones, puede mencionar descuentos para múltiples métodos de pago en el mismo fragmento de código:

 add_action('woocommerce_cart_calculate_fees','ts_add_discount', 20, 1);

función ts_add_discount ($cart_object) {

    if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;
  
    $texto_etiqueta=__("");
    
    $porcentaje=0;

    // Mencione el método de pago, por ejemplo, cod, bacs, cheque o paypal


    $cart_total = $cart_object->subtotal_ex_tax;
    
    $método_de_pago_elegido = WC()->sesión->get('método_de_pago_elegido'); //Obtener el método de pago seleccionado

    if( $método_de_pago_elegido == "paypal" ){

               $etiqueta_texto = __( "Descuento de PayPal");

               // El porcentaje a aplicar
               $porcentaje = 2; // 2%
        
    }

    else if( $método_de_pago_elegido == "bacs"){
               $label_text = __( "Descuento por Transferencia Bancaria Directa" );

               // El porcentaje a aplicar
               $porcentaje = 3; // 3%
  
    }

    else if( $método_de_pago_elegido == "cheque"){
               $label_text = __( "Descuento Pago Cheque" );

               // El porcentaje a aplicar
               $porcentaje = 2; // 2%
    }

    más {
               $label_text = __( "Descuento contra reembolso" );

               // El porcentaje a aplicar
               $porcentaje = 0; // 0%

    }

     // Calculando porcentaje
        $descuento = numero_formato(($cart_total / 100) * $porcentaje, 2);
        
    // Agregando el descuento
        $cart_object->add_fee( $label_text, -$discount, false );
    
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');
función ts_refresh_pago_método(){
    // jQuery
    ?>
    <script tipo="texto/javascript">
        (función ($){
            $( 'formulario.pago' ).on( 'cambiar', 'entrada[nombre^="método_de_pago"]', función() {
                $('cuerpo').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

Adición de importes de descuento fijos para diferentes métodos de pago a través de fragmentos de código

Suponga que desea mencionar una cantidad en lugar de un porcentaje. Puede hacerlo usando el mismo fragmento nuevamente, eliminando el paso en el que calcula el porcentaje y aceptando el monto del descuento como entrada en función de cada método de pago:

 add_action('woocommerce_cart_calculate_fees','ts_add_discount', 20, 1);

función ts_add_discount ($cart_object) {

    if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;
  
    $texto_etiqueta=__("");
    $cantidad_descuento=0;

    // Mencione el método de pago, por ejemplo, cod, bacs, cheque o paypal


    $cart_total = $cart_object->subtotal_ex_tax;
    $método_de_pago_elegido = WC()->sesión->get('método_de_pago_elegido'); //Obtener el método de pago seleccionado

    if( $método_de_pago_elegido == "paypal" ){

              $etiqueta_texto = __( "Descuento de PayPal");

              // El monto del descuento a aplicar
              $cantidad_descuento = 200; 
        
    }

    else if( $método_de_pago_elegido == "bacs"){
              
              $label_text = __( "Descuento por Transferencia Bancaria Directa" );

              // El monto del descuento a aplicar
              $cantidad_descuento = 150; 
  
    }

    else if( $método_de_pago_elegido == "cheque"){
       
             $label_text = __( "Descuento Pago Cheque" );
    
             // El monto del descuento a aplicar
             $cantidad_descuento = 100; 

    }

    más {
      
             $label_text = __( "Descuento contra reembolso" );
    
             // El monto del descuento a aplicar
             $cantidad_descuento = 0; 
    }

        
    // Agregando el descuento
       $cart_object->add_fee( $label_text, -$discount_amount, false );
    
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');
función ts_refresh_pago_método(){
    // jQuery
    ?>
    <script tipo="texto/javascript">
        (función ($){
            $( 'formulario.pago' ).on( 'cambiar', 'entrada[nombre^="método_de_pago"]', función() {
                $('cuerpo').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

Discount amount applied - add charges or discounts for different payment methods in WooCommerce

Para agregar un cargo por servicio, simplemente tiene que cambiar el signo de uno de los argumentos en la función add_fee de "-" a "+" o ningún signo, lo que implica positivo.

 add_action('woocommerce_cart_calculate_fees','ts_add_discount', 20, 1);

función ts_add_discount ($cart_object) {

    if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;
  
$texto_etiqueta=__("");

$servicio_cargo=0;

    // Mencione el método de pago, por ejemplo, cod, bacs, cheque o paypal


    $cart_total = $cart_object->subtotal_ex_tax;

    $método_de_pago_elegido = WC()->sesión->get('método_de_pago_elegido'); //Obtener el método de pago seleccionado

    if( $método_de_pago_elegido == "paypal" ){

                  $label_text = __( "Cargo por servicio de PayPal" );

                  // El cargo por servicio a aplicar
                  $servicio_cargo=200;
        
     }

    else if( $método_de_pago_elegido == "bacs"){
                  $label_text = __( "Cargo por servicio de transferencia bancaria directa" );

                  // El cargo por servicio a aplicar
                  $cargo_servicio=100;
  
    }

    else if( $método_de_pago_elegido == "cheque"){
                  $label_text = __( "Cargo por Servicio de Pago de Cheque" );
    
                  // El cargo por servicio a aplicar
                  $servicio_cargo=150;
    }

    más {
                  $label_text = __( "Cargo de servicio contra reembolso" );
    
                  // El cargo por servicio a aplicar
                  $servicio_cargo=250;
    }

        
     // Agregando el cargo por servicio
        $cart_object->add_fee( $label_text, $service_charge, false );
    
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');

función ts_refresh_pago_método(){
    // jQuery
    ?>
    <script tipo="texto/javascript">
        (función ($){
            $( 'formulario.pago' ).on( 'cambiar', 'entrada[nombre^="método_de_pago"]', función() {
                $('cuerpo').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

De esta forma, se aplicará un cargo por servicio según el método de pago seleccionado:

How to add charges or discounts for different payment methods in WooCommerce - Tyche Softwares

Agregar descuentos para diferentes métodos de pago solo para usuarios registrados (a través de fragmentos de código)

Si desea ofrecer estos descuentos solo para usuarios registrados (como se solicita a través de un comentario en esta publicación), simplemente debe agregar una condición que verifique si el usuario está conectado o no. Esto se puede hacer con la función is_user_logged_in() . El fragmento de código a continuación muestra cómo puede agregar descuentos porcentuales para un método de pago en particular solo para usuarios registrados.

 add_action('woocommerce_cart_calculate_fees','ts_add_discount', 20, 1);
función ts_add_discount ($cart_object) {
    if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;
  
    si (is_user_logged_in()){
            
            // Mencione el método de pago, por ejemplo, cod, bacs, cheque o paypal
            $método_de_pago = 'paypal';
            // El porcentaje a aplicar
            $porcentaje = 2; // 2%
            $cart_total = $cart_object->subtotal_ex_tax;
    
            $método_de_pago_elegido = WC()->sesión->get('método_de_pago_elegido'); //Obtener el método de pago seleccionado
            if( $método_de_pago == $método_de_pago_elegido){
        
                   $etiqueta_texto = __( "Descuento de PayPal");
        
                   // Calculando porcentaje
                   $descuento = numero_formato(($cart_total / 100) * $porcentaje, 2);
        
                   // Agregando el descuento
                   $cart_object->add_fee( $label_text, -$discount, false );
             }
     }
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');
función ts_refresh_pago_método(){
    // jQuery
    ?>
    <script tipo="texto/javascript">
        (función ($){
            $( 'formulario.pago' ).on( 'cambiar', 'entrada[nombre^="método_de_pago"]', función() {
                $('cuerpo').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

Puede usar cualquiera de los fragmentos de código en esta publicación según sus requisitos. Simplemente debe agregar una condición : si (is_user_logged_in()) dentro de ese fragmento de código si desea restringir esto solo a los usuarios registrados.

Agregar cargos o descuentos para diferentes métodos de pago a través de complementos

Si no desea agregar fragmentos de código, hay una manera fácil de lograr lo mismo: ¡complementos! Hay complementos gratuitos y de pago que ofrecen diferentes funciones.

  • Tarifas y descuentos basados ​​en la pasarela de pago para WooCommerce
    Este es un complemento gratuito nuestro que le permite agregar tarifas, descuentos, impuestos, etc. e incluso establecer los montos mínimos y máximos del carrito como criterio para el mismo. Incluso puedes redondear la tarifa después de aplicar el descuento. Y puede hacer todo esto con una interfaz fácil de usar accesible a través del tablero:

    Screenshot1 of plugin Payment Gateway based fees and discounts - add charges or discounts for different payment methods in WooCommerceScreenshot2 of plugin Payment Gateway based fees and discounts - add charges or discounts for different payment methods in WooCommerce

  • Descuentos por Método de Pago para WooCommerce (Gratis)
    Este es un complemento gratuito de WPCodelibrary que proporciona una interfaz simple dentro de su panel de WordPress para establecer descuentos para los métodos de pago predeterminados proporcionados por WooCommerce. Sin embargo, no tiene una función para agregar cargos por servicio o tarifas. Screenshot of plugin Discount Per Payment Method - add charges or discounts for different payment methods in WooCommerce

  • Tarifas y descuentos basados ​​en la pasarela de pago para WooCommerce ($39)
    Este complemento premium creado por nosotros viene con un conjunto completo de características en las que puede agregar tarifas y descuentos para diferentes métodos de pago según el país, el estado, la categoría del producto, etc. Además de esto, también puede aplicar impuestos sobre las tarifas (excluyendo los gastos de envío). ) utilizando el complemento. La interfaz es simple y fácil de usar, y también puede aplicar diferentes descuentos y tarifas para productos individuales.