Добавить скидку для определенного выбранного способа оплаты в WooCommerce

Без использования купона я хотел бы применить 15% скидку для определенного идентификатора метода оплаты, такого как «xyz».

Я хотел бы помочь определить, какие хуки использовать. Общая идея того, чего я хотел бы достичь:

if payment_method_hook == 'xyz'{
cart_subtotal = cart_subtotal - 15%
}

Клиенту не нужно видеть скидку на этой странице. Я хотел бы, чтобы скидка была представлена ​​правильно, только для определенного способа оплаты.

1

Решение

Вы можете использовать эту пользовательскую функцию, подключенную woocommerce_cart_calculate_fees Хук действия, который сделает скидку 15% на определенный способ оплаты.

Вам необходимо установить в этой функции свой реальный идентификатор способа оплаты (например, «bacs», «cod», «check» или «paypal»).

Вторая функция будет обновлять данные оформления заказа каждый раз, когда выбран способ оплаты.

Код:

add_action( 'woocommerce_cart_calculate_fees','shipping_method_discount', 20, 1 );
function shipping_method_discount( $cart_object ) {

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

// HERE Define your targeted shipping method ID
$payment_method = 'bacs';

// The percent to apply
$percent = 15; // 15%

$cart_total = $cart_object->subtotal_ex_tax;
$chosen_payment_method = WC()->session->get('chosen_payment_method');

if( $payment_method == $chosen_payment_method ){
$label_text = __( "Shipping discount 15%" );
// Calculation
$discount = number_format(($cart_total / 100) * $percent, 2);
// Add the discount
$cart_object->add_fee( $label_text, -$discount, false );
}
}

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

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).

Проверено и работает.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector