Pronamic Payment Gateways Fees for WooCommerce WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA
This WordPress plugin adds settings to all WooCommerce gateways to add a fixed and/or variable (percentage) fee.
Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/pronamic/pronamic-payment-gateways-fees-for-woocommerce/releases/download/v1.0.3/pronamic-payment-gateways-fees-for-woocommerce.1.0.3.zipOn Packagist as pronamic/pronamic-payment-gateways-fees-for-woocommerce:
composer require pronamic/pronamic-payment-gateways-fees-for-woocommerce
Pronamic Payment Gateways Fees for WooCommerce
This WordPress plugin adds settings to all WooCommerce gateways to add a fixed and/or variable (percentage) fee.
Introduction
This WordPress plugin adds settings to all WooCommerce gateways to add a fixed and/or variable (percentage) fee.
Installation
composer require pronamic/pronamic-payment-gateways-fees-for-woocommerce
\Pronamic\WooCommercePaymentGatewaysFees\Plugin::instance()->setup();
Screenshots

Flow
WooCommerce recommends using the woocommerce_cart_calculate_fees hook to add fees:
We suggest using the action woocommerce_cart_calculate_fees hook for adding fees.
This hook is called as soon as the WC()->cart->calculate_totals() function is called, WooCommerce uses the WC_Cart_Totals class to calculate totals:
class-wc-cart.php
/**
* Calculate totals for the items in the cart.
*
* @uses WC_Cart_Totals
*/
public function calculate_totals() {
$this->reset_totals();
if ( $this->is_empty() ) {
$this->session->set_session();
return;
}
do_action( 'woocommerce_before_calculate_totals', $this );
new WC_Cart_Totals( $this );
do_action( 'woocommerce_after_calculate_totals', $this );
}
When creating a WC_Cart_Totals instance, the WC_Cart_Totals->calculate() function is executed:
class-wc-cart-totals.php
/**
* Run all calculation methods on the given items in sequence.
*
* @since 3.2.0
*/
protected function calculate() {
$this->calculate_item_totals();
$this->calculate_shipping_totals();
$this->calculate_fee_totals();
$this->calculate_totals();
}
What can be seen here is that the final totals are calculated after calculating the fee totals. This means that the order total is not yet available within the woocommerce_cart_calculate_fees hook. In other words, within the woocommerce_cart_calculate_fees hook the result of $cart->get_total( '' ) will always be 0.
This is inconvenient because the payment gateway fees are often based on the total amount to be paid. That's why we hook into the woocommerce_after_calculate_totals hook and recalculate the totals again. This extra calculation seems double, but it seems to be the easiest way to reliably request the cart total.
Links
Releases
4 releases. Each count is every asset in that release; expand a row for the breakdown.
Active-site estimate ≈10 comes from the median of recent superseded releases. Method.
