问题
Without a using coupon functionality I would like to apply a 15% discount for a specific payment method ID like 'xyz'.
I would like help identifying which hooks to use. The general idea of what I would like to achieve is:
if payment_method_hook == 'xyz'{
cart_subtotal = cart_subtotal - 15%
}
The customer does not need to see the discount on this page. I would like the discount to be submitted properly, only for the specific payment method.
回答1:
You can use this custom function hooked in woocommerce_cart_calculate_fees
action hook, that will make a discount of 15% for a defined payment method.
You should need to set in this function your real payment method ID (like 'bacs', 'cod', 'cheque' or 'paypal').
The 2nd function will refresh checkout data each time that a payment method is selected.
The code:
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
}
Code goes in function.php file of your active child theme (or active theme).
Tested and works.
回答2:
This may help others.. I needed to check the payment method for 2 methods AND check if the user was a specific role..
if (($chosen_payment_method == 'stripe' || $chosen_payment_method == 'paypal') && current_user_can('dealer')) {
来源:https://stackoverflow.com/questions/47956053/add-a-discount-for-specific-selected-payment-method-in-woocommerce