Jak dodawać opłaty lub rabaty dla różnych metod płatności w WooCommerce?

Opublikowany: 2019-03-26

Widzimy w witrynach e-commerce, że z każdą metodą płatności, którą wybierzesz podczas płacenia, często wiąże się opłata za usługę lub nawet zniżka. Warto również zauważyć, że opłata za usługę za pobraniem jest wyższa niż za alternatywne metody płatności. Ma to na celu zwiększenie szans na przedpłaty. Przedpłaty pomagają nie tylko zmniejszyć ryzyko nieotrzymania zapłaty przez klienta, ale także zapewnić przepływ gotówki w biznesie. W przypadku braku opłaty serwisowej związanej z metodami płatności, mogą być oferowane zniżki, jeśli zdecydujesz się zapłacić inną metodą niż płatność przy odbiorze.

Możesz również dodać rabaty do niektórych metod płatności w zależności od programów lub promocji, które możesz chcieć uruchomić. Rabaty są ogólnie atrakcyjne dla klientów i pomagają w zwiększeniu sprzedaży. W tym poście pokażemy Ci różne sposoby dodawania opłat lub rabatów dla różnych metod płatności w WooCommerce, a tym samym czerpania z nich korzyści.

Dodawanie rabatów procentowych dla różnych metod płatności za pomocą fragmentów kodu

Możesz to osiągnąć, dodając fragmenty kodu w pliku functions.php motywu potomnego.

Poniższy kod dodaje rabat do całkowitej kwoty, gdy PayPal jest wybrany jako metoda płatności na stronie kasy WooCommerce. Przypisując wartość do $procent, możesz określić procent rabatu, jaki chcesz zastosować do wybranej metody płatności. Domyślne metody płatności w WooCommerce to bezpośredni przelew bankowy (bacs), płatności czekiem (czek), za pobraniem (za pobraniem) i PayPal (paypal), a ich identyfikatory są wymienione w nawiasach.

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

function ts_add_discount( $cart_object ) {

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

    // Podaj metodę płatności, np. dorsz, bacs, czek lub paypal
    $payment_method = 'paypal';

    // Procent do zastosowania
    $procent = 2; // 2%

    $cart_total = $cart_object->podsuma_ex_tax;
    
    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pobierz wybraną metodę płatności

    if( $payment_method == $chosen_payment_method ){
        
                   $label_text = __( "Zniżka PayPal" );
        
                   // Obliczanie procentu
                   $rabat = format_liczby(($całkowita_koszyka / 100) * $procent, 2);
        
                   // Dodanie rabatu
                   $cart_object->add_fee( $tekst_etykiety, -$rabat, fałsz );
    }
}

add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' );

funkcja ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (funkcja($){
            $( 'form.checkout' ).on( 'zmiana', 'input[name^="metoda_płatności"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

Potrzebne będą tu dwie funkcje – jedna do dodawania odpowiednich rabatów lub opłat, a druga do śledzenia zmian w wyborze przez użytkownika metody płatności, dla której używamy javascript. Haki woocommerce_cart_calculate_fees i woocommerce_review_order_before_payment służą do dodania odpowiednio tych dwóch funkcji.

Wartości, jakie mają metody płatności dla bezpośredniego przelewu bankowego, czeku, płatności przy odbiorze i PayPal, to odpowiednio bacs , check , cod i paypal . Funkcja add_fee() jest wbudowaną metodą klasy WC_Cart w WooCommerce.

Spowoduje to odliczenie kwoty rabatu od sumy częściowej i wyświetlenie sumy:

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

Po niewielkiej modyfikacji możesz wspomnieć o zniżkach dla wielu metod płatności w tym samym fragmencie kodu:

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

function ts_add_discount( $cart_object ) {

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

    // Podaj metodę płatności, np. dorsz, bacs, czek lub paypal


    $cart_total = $cart_object->podsuma_ex_tax;
    
    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pobierz wybraną metodę płatności

    if( $chosen_payment_method == "paypal" ){

               $label_text = __( "Zniżka PayPal" );

               // Procent do zastosowania
               $procent = 2; // 2%
        
    }

    else if( $chosen_payment_method == "bacs"){
               $label_text = __( "Zniżka na bezpośredni przelew bankowy" );

               // Procent do zastosowania
               $procent = 3; // 3%
  
    }

    else if( $chosen_payment_method == "czek"){
               $label_text = __( "Rabat płatności czekiem" );

               // Procent do zastosowania
               $procent = 2; // 2%
    }

    w przeciwnym razie {
               $label_text = __( "Rabat za pobraniem" );

               // Procent do zastosowania
               $procent = 0; // 0%

    }

     // Obliczanie procentu
        $rabat = format_liczby(($całkowita_koszyka / 100) * $procent, 2);
        
    // Dodanie rabatu
        $cart_object->add_fee( $tekst_etykiety, -$rabat, fałsz );
    
}

add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' );
funkcja ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (funkcja($){
            $( 'form.checkout' ).on( 'zmiana', 'input[name^="metoda_płatności"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

Dodawanie stałych kwot rabatu dla różnych metod płatności za pomocą fragmentów kodu

Załóżmy, że zamiast procentu chcesz podać kwotę. Możesz to zrobić ponownie, używając tego samego fragmentu kodu, eliminując krok, w którym obliczasz wartość procentową i akceptujesz kwotę rabatu jako dane wejściowe na podstawie każdej metody płatności:

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

function ts_add_discount( $cart_object ) {

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

    // Podaj metodę płatności, np. dorsz, bacs, czek lub paypal


    $cart_total = $cart_object->podsuma_ex_tax;
    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pobierz wybraną metodę płatności

    if( $chosen_payment_method == "paypal" ){

              $label_text = __( "Zniżka PayPal" );

              // Kwota rabatu do zastosowania
              $discount_amount = 200; 
        
    }

    else if( $chosen_payment_method == "bacs"){
              
              $label_text = __( "Zniżka na bezpośredni przelew bankowy" );

              // Kwota rabatu do zastosowania
              $rabat_kwota = 150; 
  
    }

    else if( $chosen_payment_method == "czek"){
       
             $label_text = __( "Rabat płatności czekiem" );
    
             // Kwota rabatu do zastosowania
             $discount_amount = 100; 

    }

    w przeciwnym razie {
      
             $label_text = __( "Rabat za pobraniem" );
    
             // Kwota rabatu do zastosowania
             $rabat_kwota = 0; 
    }

        
    // Dodanie rabatu
       $koszyk_obiekt->dodatkowa opłata( $tekst_etykiety, -$kwota_rabatu, fałsz );
    
}

add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' );
funkcja ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (funkcja($){
            $( 'form.checkout' ).on( 'zmiana', 'input[name^="metoda_płatności"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

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

Aby dodać opłatę za usługę, wystarczy zmienić znak jednego z argumentów w funkcji add_fee z „-” na „+” lub w ogóle nie ma znaku, co oznacza dodatni.

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

function ts_add_discount( $cart_object ) {

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

$service_charge=0;

    // Podaj metodę płatności, np. dorsz, bacs, czek lub paypal


    $cart_total = $cart_object->podsuma_ex_tax;

    $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pobierz wybraną metodę płatności

    if( $chosen_payment_method == "paypal" ){

                  $label_text = __( "Opłata za usługę PayPal" );

                  // Opłata za usługę do zastosowania
                  $service_charge=200;
        
     }

    else if( $chosen_payment_method == "bacs"){
                  $label_text = __( "Opłata za usługę bezpośredniego przelewu bankowego" );

                  // Opłata za usługę do zastosowania
                  $service_charge=100;
  
    }

    else if( $chosen_payment_method == "czek"){
                  $label_text = __( "Opłata za usługę płatności czekiem" );
    
                  // Opłata za usługę do zastosowania
                  $service_charge=150;
    }

    w przeciwnym razie {
                  $label_text = __( "Opłata za usługę za pobraniem" );
    
                  // Opłata za usługę do zastosowania
                  $service_charge=250;
    }

        
     // Dodanie opłaty serwisowej
        $cart_object->add_fee( $text_label_, $service_charge, false );
    
}

add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' );

funkcja ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (funkcja($){
            $( 'form.checkout' ).on( 'zmiana', 'input[name^="metoda_płatności"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

W ten sposób zostanie naliczona opłata za usługę zgodnie z wybraną metodą płatności:

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

Dodawanie rabatów dla różnych metod płatności tylko dla zalogowanych użytkowników (poprzez fragmenty kodu)

Jeśli chcesz oferować te zniżki tylko dla zalogowanych użytkowników (zgodnie z prośbą w komentarzu do tego posta), musisz po prostu dodać warunek, który sprawdza, czy użytkownik jest zalogowany, czy nie. Można to zrobić za pomocą funkcji is_user_logged_in() . Poniższy fragment kodu pokazuje, jak dodać rabaty procentowe dla określonej metody płatności tylko dla zalogowanych użytkowników.

 add_action( 'woocommerce_cart_calculate_fees','ts_add_discount', 20, 1 );
function ts_add_discount( $cart_object ) {
    if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;
  
    jeśli (is_user_logged_in()){
            
            // Podaj metodę płatności, np. dorsz, bacs, czek lub paypal
            $payment_method = 'paypal';
            // Procent do zastosowania
            $procent = 2; // 2%
            $cart_total = $cart_object->podsuma_ex_tax;
    
            $chosen_payment_method = WC()->session->get('chosen_payment_method'); //Pobierz wybraną metodę płatności
            if( $payment_method == $chosen_payment_method ){
        
                   $label_text = __( "Zniżka PayPal" );
        
                   // Obliczanie procentu
                   $rabat = format_liczby(($całkowita_koszyka / 100) * $procent, 2);
        
                   // Dodanie rabatu
                   $cart_object->add_fee( $tekst_etykiety, -$rabat, fałsz );
             }
     }
}

add_action( 'woocommerce_review_order_before_payment', 'ts_refresh_payment_method' );
funkcja ts_refresh_payment_method(){
    // jQuery
    ?>
    <script type="text/javascript">
        (funkcja($){
            $( 'form.checkout' ).on( 'zmiana', 'input[name^="metoda_płatności"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

Możesz użyć dowolnego z fragmentów kodu w tym poście, w zależności od swoich wymagań. Musisz po prostu dodać warunek - if (is_user_logged_in()) wewnątrz tego fragmentu kodu, jeśli chcesz ograniczyć to tylko do zalogowanych użytkowników.

Dodawanie opłat lub rabatów dla różnych metod płatności za pośrednictwem wtyczek

Jeśli nie chcesz dodawać fragmentów kodu, istnieje prosty sposób na osiągnięcie tego samego – wtyczki! Istnieją zarówno darmowe, jak i płatne wtyczki, które oferują różne funkcje.

  • Opłaty i rabaty oparte na bramce płatności dla WooCommerce
    Jest to darmowa wtyczka, która pozwala dodawać opłaty, rabaty, podatki itp., A nawet ustawiać minimalną i maksymalną kwotę koszyka jako kryterium tego samego. Możesz nawet zaokrąglić opłatę po zastosowaniu rabatu. Możesz to wszystko zrobić za pomocą łatwego w obsłudze interfejsu dostępnego z pulpitu nawigacyjnego:

    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

  • Zniżki na metodę płatności dla WooCommerce (bezpłatnie)
    Jest to darmowa wtyczka firmy WPCodelibrary, która zapewnia prosty interfejs w panelu WordPress do ustawiania rabatów dla domyślnych metod płatności dostarczanych przez WooCommerce. Nie ma jednak funkcji dodawania opłat za usługi ani opłat. Screenshot of plugin Discount Per Payment Method - add charges or discounts for different payment methods in WooCommerce

  • Opłaty i rabaty oparte na bramce płatności dla WooCommerce (39 USD)
    Ta wtyczka premium przez nas zawiera cały zestaw funkcji, w których możesz dodawać opłaty, a także rabaty dla różnych metod płatności w zależności od kraju, stanu, kategorii produktu itp. Poza tym możesz również nakładać podatki od opłat (z wyłączeniem kosztów wysyłki ) za pomocą wtyczki. Interfejs jest prosty i przyjazny dla użytkownika, można też stosować różne rabaty i opłaty na poszczególne produkty.