如何在 WooCommerce 中为不同的付款方式添加费用或折扣

已发表: 2019-03-26

我们在电子商务网站上看到,您在结账时选择的每种付款方式通常都会产生服务费,甚至是相关的折扣。 还值得注意的是,货到付款的服务费高于其他支付方式。 这是为了增加预付款的机会。 预付款不仅有助于降低客户未付款的风险,还有助于确保业务的现金流。 如果付款方式不收取服务费,当您选择使用货到付款以外的方式付款时,可能会获得折扣。

您可能还希望根据您可能想要运行的计划或促销活动为某些付款方式添加折扣。 折扣通常对客户有吸引力,有助于增加销售额。 在这篇文章中,我们将向您展示在 WooCommerce 中为不同付款方式添加费用或折扣的各种方式,从而获得相同的好处。

通过代码片段为不同的付款方式添加百分比折扣

您可以通过在子主题的 functions.php 文件中添加代码片段来实现此目的。

当在 WooCommerce 结帐页面上选择 PayPal 作为付款方式时,下面的代码会为总金额添加折扣。 通过为 $percent 分配一个值,您可以指定希望在所需付款方式上应用的折扣百分比。 WooCommerce 中的默认付款方式是直接银行转账 (bacs)、支票付款 (cheque)、货到付款 (cod) 和 PayPal (paypal),括号中提到了它们的 ID。

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

函数 ts_add_discount( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) 返回;

    // 提及付款方式,例如 cod、bacs、check 或 paypal
    $payment_method = '贝宝';

    // 要应用的百分比
    $% = 2; // 2%

    $cart_total = $cart_object->subtotal_ex_tax;
    
    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //获取选择的支付方式

    如果($payment_method == $chosen_payment_method){
        
                   $label_text = __("贝宝折扣");
        
                   // 计算百分比
                   $discount = number_format(($cart_total / 100) * $percent, 2);
        
                   // 添加折扣
                   $cart_object->add_fee($label_text, -$discount, false);
    }
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');

函数 ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (函数($){
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </脚本>
    <?php
}

您将需要两个功能 - 一个用于添加适当的折扣或费用,另一个用于密切关注用户选择付款方式的变化,我们使用 javascript。 woocommerce_cart_calculate_feeswoocommerce_review_order_before_payment钩子分别用于添加这两个功能。

Direct Bank Transfer、Cheque、Cash-on-Delivery 和 PayPal 的付款方式的值分别为bacscheckcodpaypaladd_fee()函数是 WooCommerce 中WC_Cart类的内置方法。

这将导致从小计中扣除折扣金额,因此将显示总计:

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

只需稍加修改,您就可以在同一代码段中提及多种付款方式的折扣:

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

函数 ts_add_discount( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) 返回;
  
    $label_text=__("");
    
    $%=0;

    // 提及付款方式,例如 cod、bacs、check 或 paypal


    $cart_total = $cart_object->subtotal_ex_tax;
    
    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //获取选择的支付方式

    if( $chosen_payment_method == "paypal" ){

               $label_text = __("贝宝折扣");

               // 要应用的百分比
               $% = 2; // 2%
        
    }

    否则 if( $chosen_payment_method == "bacs"){
               $label_text = __("直接银行转账折扣");

               // 要应用的百分比
               $% = 3; // 3%
  
    }

    否则如果($chosen_payment_method == “支票”){
               $label_text = __( "支票付款折扣" );

               // 要应用的百分比
               $% = 2; // 2%
    }

    别的 {
               $label_text = __("货到付款折扣");

               // 要应用的百分比
               $% = 0; // 0%

    }

     // 计算百分比
        $discount = number_format(($cart_total / 100) * $percent, 2);
        
    // 添加折扣
        $cart_object->add_fee($label_text, -$discount, false);
    
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');
函数 ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (函数($){
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </脚本>
    <?php
}

通过代码片段为不同的付款方式添加固定折扣金额

假设您希望提及金额而不是百分比。 您可以通过消除计算百分比的步骤并根据每种付款方式接受折扣金额作为输入,再次使用相同的代码段来执行此操作:

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

函数 ts_add_discount( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) 返回;
  
    $label_text=__("");
    $discount_amount=0;

    // 提及付款方式,例如 cod、bacs、check 或 paypal


    $cart_total = $cart_object->subtotal_ex_tax;
    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //获取选择的支付方式

    if( $chosen_payment_method == "paypal" ){

              $label_text = __("贝宝折扣");

              // 要应用的折扣金额
              $discount_amount = 200; 
        
    }

    否则 if( $chosen_payment_method == "bacs"){
              
              $label_text = __("直接银行转账折扣");

              // 要应用的折扣金额
              $discount_amount = 150; 
  
    }

    否则如果($chosen_payment_method == “支票”){
       
             $label_text = __( "支票付款折扣" );
    
             // 要应用的折扣金额
             $discount_amount = 100; 

    }

    别的 {
      
             $label_text = __("货到付款折扣");
    
             // 要应用的折扣金额
             $discount_amount = 0; 
    }

        
    // 添加折扣
       $cart_object->add_fee($label_text, -$discount_amount, false);
    
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');
函数 ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (函数($){
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </脚本>
    <?php
}

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

要添加服务费,您只需将add_fee函数中的一个参数的符号从“-”更改为“+”或根本没有符号,这意味着肯定。

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

函数 ts_add_discount( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) 返回;
  
$label_text=__("");

$service_charge=0;

    // 提及付款方式,例如 cod、bacs、check 或 paypal


    $cart_total = $cart_object->subtotal_ex_tax;

    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //获取选择的支付方式

    if( $chosen_payment_method == "paypal" ){

                  $label_text = __("贝宝服务费");

                  // 要申请的服务费
                  $service_charge=200;
        
     }

    否则 if( $chosen_payment_method == "bacs"){
                  $label_text = __("直接银行转账服务费");

                  // 要申请的服务费
                  $service_charge=100;
  
    }

    否则如果($chosen_payment_method == “支票”){
                  $label_text = __("支票支付服务费");
    
                  // 要申请的服务费
                  $service_charge=150;
    }

    别的 {
                  $label_text = __("货到付款服务费");
    
                  // 要申请的服务费
                  $service_charge=250;
    }

        
     // 添加服务费
        $cart_object->add_fee($label_text, $service_charge, false);
    
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');

函数 ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (函数($){
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </脚本>
    <?php
}

这样,将根据所选的付款方式收取服务费:

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

仅为登录用户添加不同付款方式的折扣(通过代码片段)

如果您希望仅为已登录的用户提供这些折扣(通过对此帖子的评论提出的要求),您只需添加一个条件来检查用户是否已登录。 这可以通过函数is_user_logged_in()来完成。 下面的代码片段显示了如何仅为登录用户添加特定付款方式的百分比折扣。

 add_action('woocommerce_cart_calculate_fees','ts_add_discount', 20, 1);
函数 ts_add_discount( $cart_object ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) 返回;
  
    if (is_user_logged_in()){
            
            // 提及付款方式,例如 cod、bacs、check 或 paypal
            $payment_method = '贝宝';
            // 要应用的百分比
            $% = 2; // 2%
            $cart_total = $cart_object->subtotal_ex_tax;
    
            $chosen_payment_method = WC()->session->get('chosen_payment_method'); //获取选择的支付方式
            如果($payment_method == $chosen_payment_method){
        
                   $label_text = __("贝宝折扣");
        
                   // 计算百分比
                   $discount = number_format(($cart_total / 100) * $percent, 2);
        
                   // 添加折扣
                   $cart_object->add_fee($label_text, -$discount, false);
             }
     }
}

add_action('woocommerce_review_order_before_payment', 'ts_refresh_payment_method');
函数 ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (函数($){
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </脚本>
    <?php
}

您可以根据需要使用本文中的任何代码片段。 如果您想将其限制为仅登录用户,您只需在该代码段内添加一个条件- if (is_user_logged_in())

通过插件为不同的付款方式添加费用或折扣

如果您不想添加代码片段,有一个简单的方法来实现相同的功能 - 插件! 有提供不同功能的免费和付费插件。

  • WooCommerce 基于支付网关的费用和折扣
    这是我们的一个免费插件,可让您添加费用、折扣、税金等,甚至可以将最小和最大购物车金额设置为相同的标准。 您甚至可以在应用折扣后四舍五入费用。 您可以通过仪表板访问易于使用的界面来完成所有这些操作:

    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

  • WooCommerce 每种付款方式的折扣(免费)
    这是 WPCodelibrary 的一个免费插件,它在您的 WordPress 仪表板中提供了一个简单的界面,可以为 WooCommerce 提供的默认付款方式设置折扣。 但是,它没有添加服务费或费用的功能。 Screenshot of plugin Discount Per Payment Method - add charges or discounts for different payment methods in WooCommerce

  • 基于支付网关的 WooCommerce 费用和折扣(39 美元)
    我们的这个高级插件具有一整套功能,您可以根据国家、州、产品类别等为不同的付款方式添加费用和折扣。除此之外,您还可以对费用征税(不包括运费) 使用插件。 界面简洁友好,您还可以针对单个产品应用不同的折扣和费用。