如何在 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 美元)
    我們的這個高級插件具有一整套功能,您可以根據國家、州、產品類別等為不同的付款方式添加費用和折扣。除此之外,您還可以對費用徵稅(不包括運費) 使用插件。 界面簡潔友好,您還可以針對單個產品應用不同的折扣和費用。