How to Add WooCommerce Checkout Fee for a Payment Gateway
Sometimes, it is necessary to add a Transaction or Checkout Fee on the WooCommerce Checkout page if you want to charge a specific amount from your customer as payment gateway charges. Here’s a simple PHP snippet to add a fee to the checkout for every payment or for a specific payment gateway.
Please do remember that for certain payment gateways such as PayPal, adding checkout fees is currently against their Terms of Service so make sure to check this first.
Just copy this snippet to the end of your active theme's functions.php file or you can use the Code Snippets plugin from WordPress.org repository. Enjoy!
Snippet #1: Add Checkout Fee for all Active WooCommerce Payment Gateways
This snippet will add a fixed Transaction Charge of $5 to the Checkout page for all available action WooCommerce Payment Gateways.
/**
* @snippet WooCommerce Add fee to checkout
* @author Sayan Datta
* @testedwith WooCommerce 4.8
* @donate $10 https://paypal.me/iamsayan
*/
add_action( 'woocommerce_cart_calculate_fees', 'sayand_add_checkout_fee' );
function sayand_add_checkout_fee( $cart ) {
// Edit "Transaction Fee" and "5" below to control Label and Amount
$cart->add_fee( 'Transaction Fee', 5 );
}
Snippet #2: Add Checkout Fee to a specific WooCommerce Payment Gateway
This snippet will add a fixed Transaction Charge of $5 to the Checkout page to a specific gateway called "gateway". It also triggers checkout updates dynamically when the payment method selection changes in the UI.
/**
* @snippet WooCommerce Add fee to checkout
* @author Sayan Datta
* @testedwith WooCommerce 4.8
* @donate $10 https://paypal.me/iamsayan
*/
// Part 1: assign fee
add_action( 'woocommerce_cart_calculate_fees', 'sayand_add_checkout_fee' );
function sayand_add_checkout_fee( $cart ) {
$chosen_gateway = WC()->session->get( 'chosen_payment_method' );
if ( $chosen_gateway == 'gateway' ) { // here gateway can be replaced by paypal, cod etc
// Edit "Transaction Fee" and "5" below to control Label and Amount
$cart->add_fee( 'Transaction Fee', 5 );
}
}
// Part 2: reload checkout on payment gateway change
add_action( 'woocommerce_review_order_before_payment', 'sayand_refresh_checkout_on_payment_methods_change' );
function sayand_refresh_checkout_on_payment_methods_change() {
?>
<script type="text/javascript">
(function($){
$( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
$('body').trigger('update_checkout');
});
})(jQuery);
</script>
<?php
}
Snippet #3: Add Checkout Fee to a specific Shipping Method and Country
This snippet will add a fixed Transaction Charge of $5 to the Checkout page to a specific shipping method called "local_pickup" and country called "US".
/**
* @snippet WooCommerce Add fee to checkout
* @author Sayan Datta
* @testedwith WooCommerce 4.8
* @donate $10 https://paypal.me/iamsayan
*/
add_action( 'woocommerce_cart_calculate_fees', 'sayand_add_checkout_fee' );
function sayand_add_checkout_fee( $cart ) {
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
if ( 0 === strpos( $chosen_shipping, 'local_pickup' ) && WC()->customer->get_billing_country() == 'US' ) {
// Edit "Transaction Fee" and "5" below to control Label and Amount
$cart->add_fee( 'Transaction Fee', 5 );
}
}
Does this snippet still work?
I have tested this code with OceanWP theme, WooCommerce 4.8, and a WordPress-friendly hosting on PHP 7.4. If you encounter any compatibility issues or would like to report feedback, feel free to use the comments below!
Discussion (3)
Subir D.
It works great!
Sayan Datta
Thanks 🙂
Soumyendu
I want to give cash back to customers opted for direct bank transfer; how to do that? Wallet plugins are not having such options. Please help.