Как добавить сборы или скидки для разных способов оплаты в WooCommerce

Опубликовано: 2019-03-26

Мы видим на веб-сайтах электронной коммерции, что с каждым способом оплаты, который вы выбираете при оформлении заказа, часто взимается плата за обслуживание или даже скидка. Примечательно также, что комиссия за услугу «Наложенный платеж» выше, чем при альтернативных способах оплаты. Это сделано для того, чтобы увеличить шансы на предоплату. Предоплата помогает не только снизить риск неполучения оплаты клиентом, но и обеспечить денежный поток в бизнесе. В случае отсутствия платы за обслуживание, связанной со способами оплаты, могут быть предложены скидки, если вы выберете способ оплаты, отличный от наложенного платежа.

Вы также можете добавить скидки на определенные способы оплаты в зависимости от схем или рекламных акций, которые вы, возможно, захотите запустить. Скидки в целом привлекательны для покупателей и помогают увеличить продажи. В этом посте мы покажем вам различные способы добавления комиссий или скидок для различных способов оплаты в WooCommerce и, следовательно, получения преимуществ от этого.

Добавление процентных скидок для разных способов оплаты с помощью фрагментов кода

Вы можете добиться этого, добавив фрагменты кода в файл functions.php вашей дочерней темы.

Приведенный ниже код добавляет скидку к общей сумме, когда PayPal выбран в качестве способа оплаты на странице оформления заказа WooCommerce. Присвоив значение $percent, вы можете указать процент скидки, которую вы хотите применить к желаемому способу оплаты. Способы оплаты по умолчанию в WooCommerce — это прямой банковский перевод (bacs), чековые платежи (чек), наложенный платеж (наложенный платеж) и PayPal (paypal), а их идентификаторы указаны в скобках.

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

функция ts_add_discount($cart_object) {

    если (is_admin() &&! Определено('DOING_AJAX')) return;

    // Укажите способ оплаты, например, наложенный платеж, бакс, чек или PayPal
    $payment_method = 'paypal';

    // Процент для применения
    $процент = 2; // 2%

    $cart_total = $cart_object->subtotal_ex_tax;
    
    $chosen_payment_method = WC()->сессия->get('выбранный_способ_оплаты'); //Получить выбранный способ оплаты

    если( $payment_method == $chosen_payment_method ){
        
                   $label_text = __("Скидка PayPal");
        
                   // Расчет процента
                   $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
    ?>
    <тип сценария="текст/javascript">
        (функция ($) {
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('тело').trigger('update_checkout');
            });
        })(jQuery);
    </скрипт>
    <?php
}

Здесь вам понадобятся две функции: одна для добавления соответствующих скидок или комиссий, а другая для отслеживания изменений в выборе способа оплаты пользователем, для чего мы используем javascript. Хуки woocommerce_cart_calculate_fees и woocommerce_review_order_before_payment используются для добавления этих двух функций соответственно.

Значения способов оплаты для прямого банковского перевода, чека, наложенного платежа и PayPal: bacs , check , cod и paypal соответственно. Функция add_fee() — это встроенный метод класса WC_Cart в WooCommerce.

Это приведет к тому, что сумма скидки будет вычтена из промежуточного итога, и таким образом будет отображаться общая сумма:

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) {

    если (is_admin() &&! Определено('DOING_AJAX')) return;
  
    $label_text=__("");
    
    $процент=0;

    // Укажите способ оплаты, например, наложенный платеж, бакс, чек или PayPal


    $cart_total = $cart_object->subtotal_ex_tax;
    
    $chosen_payment_method = WC()->сессия->get('выбранный_способ_оплаты'); //Получить выбранный способ оплаты

    если( $chosen_payment_method == "paypal" ){

               $label_text = __("Скидка PayPal");

               // Процент для применения
               $процент = 2; // 2%
        
    }

    иначе если($chosen_payment_method == "бакс"){
               $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
    ?>
    <тип сценария="текст/javascript">
        (функция ($) {
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('тело').trigger('update_checkout');
            });
        })(jQuery);
    </скрипт>
    <?php
}

Добавление фиксированных сумм скидок для различных способов оплаты с помощью фрагментов кода

Предположим, вы хотите указать сумму вместо процента. Вы можете сделать это снова, используя тот же фрагмент, убрав шаг, на котором вы вычисляете процент, и приняв сумму скидки в качестве входных данных для каждого метода оплаты:

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

функция ts_add_discount($cart_object) {

    если (is_admin() &&! Определено('DOING_AJAX')) return;
  
    $label_text=__("");
    $скидка_сумма=0;

    // Укажите способ оплаты, например, наложенный платеж, бакс, чек или PayPal


    $cart_total = $cart_object->subtotal_ex_tax;
    $chosen_payment_method = WC()->сессия->get('выбранный_способ_оплаты'); //Получить выбранный способ оплаты

    если( $chosen_payment_method == "paypal" ){

              $label_text = __("Скидка PayPal");

              // Сумма скидки для применения
              $discount_amount = 200; 
        
    }

    иначе если($chosen_payment_method == "бакс"){
              
              $label_text = __("Скидка на прямой банковский перевод");

              // Сумма скидки для применения
              $discount_amount = 150; 
  
    }

    иначе если( $chosen_payment_method == "чек"){
       
             $label_text = __("Скидка на оплату чеком");
    
             // Сумма скидки для применения
             $discount_amount = 100; 

    }

    еще {
      
             $label_text = __("Скидка за наложенный платеж");
    
             // Сумма скидки для применения
             $скидка_сумма = 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
    ?>
    <тип сценария="текст/javascript">
        (функция ($) {
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('тело').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) {

    если (is_admin() &&! Определено('DOING_AJAX')) return;
  
$label_text=__("");

$service_charge=0;

    // Укажите способ оплаты, например, наложенный платеж, бакс, чек или PayPal


    $cart_total = $cart_object->subtotal_ex_tax;

    $chosen_payment_method = WC()->сессия->get('выбранный_способ_оплаты'); //Получить выбранный способ оплаты

    если( $chosen_payment_method == "paypal" ){

                  $label_text = __("Плата за обслуживание PayPal");

                  // Применяемая плата за обслуживание
                  $service_charge=200;
        
     }

    иначе если($chosen_payment_method == "бакс"){
                  $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
    ?>
    <тип сценария="текст/javascript">
        (функция ($) {
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('тело').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) {
    если (is_admin() &&! Определено('DOING_AJAX')) return;
  
    если (is_user_logged_in()){
            
            // Укажите способ оплаты, например, наложенный платеж, бакс, чек или PayPal
            $payment_method = 'paypal';
            // Процент для применения
            $процент = 2; // 2%
            $cart_total = $cart_object->subtotal_ex_tax;
    
            $chosen_payment_method = WC()->сессия->get('выбранный_способ_оплаты'); //Получить выбранный способ оплаты
            если( $payment_method == $chosen_payment_method ){
        
                   $label_text = __("Скидка PayPal");
        
                   // Расчет процента
                   $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
    ?>
    <тип сценария="текст/javascript">
        (функция ($) {
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('тело').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 (бесплатно)
    Это бесплатный плагин от WPCodibrary, который предоставляет простой интерфейс внутри вашей панели управления WordPress для установки скидок для способов оплаты по умолчанию, предоставляемых WooCommerce. Однако в нем нет функции добавления платы за обслуживание или сборов. Screenshot of plugin Discount Per Payment Method - add charges or discounts for different payment methods in WooCommerce

  • Сборы и скидки на основе платежного шлюза для WooCommerce (39 долларов США)
    Этот премиальный плагин от нас поставляется с целым набором функций, в которых вы можете добавлять сборы, а также скидки для различных способов оплаты в зависимости от страны, штата, категории продукта и т. д. Кроме того, вы также можете применять налоги на сборы (за исключением стоимости доставки). ) с помощью плагина. Интерфейс прост и удобен для пользователя, и вы также можете применять различные скидки и сборы для отдельных продуктов.