DocumentationProOrder-pay & manual orders
Order-pay & manual orders
WooCommerce only calculates fees at checkout, so a pay-for-order link and a hand-made order get no payment fee. The free version makes sure nobody is charged for a method they did not use. Pro charges the right fee on both.
The gap in core
woocommerce_cart_calculate_fees, the hook every fee plugin adds its fee on,
runs when a cart is totalled. The pay-for-order page has no cart — it has an
order — and an order created in the admin never had one. WooCommerce has
tracked this since 2017 as core issue 17794 (opens in a new tab),
and it is not something a plugin can fix from the outside without writing the
fee onto the order itself.
| Checkout | Order-pay link | Admin order | Express wallet | |
|---|---|---|---|---|
| Free | Charged | Stale fee removed | Nothing | Charged |
| Pro | Charged | Right fee written | Written on save | Corrected before capture |
What free does
It never overcharges. A customer opening a pay-for-order link and switching payment method leaves behind the old method’s fee. The free version removes it. Nothing replaces it, because core will not calculate fees on that page — so the customer pays no fee rather than the wrong one.
Orders created in the admin get no fee on the free version, and none is removed either.
What Pro does
It never undercharges. With Charge the fee on manual & order-pay orders on (under General settings), Pro writes the right fee onto the order itself, through the same guard chain, tier selection and fee engine that checkout uses — so a rule with conditions is evaluated against the order’s own facts, not the cart’s.
On the pay-for-order page the customer sees each method’s fee beside its name and the order total updates as they switch, so the amount on the Pay button is the amount they are charged.
Failed payment, second try
The common case: a card payment fails at checkout, the customer lands on the pay-for-order page and picks bank transfer instead.
- Free: the card fee is removed. No bank-transfer fee is added. The customer pays the order without a fee.
- Pro: the card fee is replaced by the bank-transfer fee (or by the bank-transfer discount, if that is what you configured). The order carries the fee for the method that was actually used.
Either way nobody pays for a method they did not use.
Orders you create
Pro syncs the fee when an order you created in the admin is saved or
recalculated, reading the order’s payment method. Change the method and save,
and the fee follows it; remove the method and the fee goes. The line is tagged
with _pay4payment_fee_source: admin so an export can tell it apart.
Orders that came from checkout keep their checkout-computed line, and an order already completed, cancelled or refunded is left alone.
A separate setting, Add the fee as, decides whether the fee goes on as a WooCommerce fee line or as a product line — on every order the plugin writes a fee onto, checkout included. That is its own page.
Wallets and express
Apple Pay, Google Pay and the other wallet buttons skip the checkout form, and the gateway they use never enters the session the cart fee is worked out from. Pro corrects the fee on those orders before the amount is authorised, so the wallet captures the right total, for the official WooCommerce Stripe gateway’s express sheet. On the free version the stale fee is removed instead, so a wallet order carries no payment fee rather than the wrong one.
Limits
- A wallet sheet opened from the pay-for-order page is drawn before the order’s method is known, so for a moment the sheet can show a total without the fee. The authorised amount is corrected first; the sheet is not.
- Pay-for-order links on manual orders remain a core limitation for the free version; Pro’s off-checkout charge is the workaround.
- Both are on the limitations page.
Charging on order-pay and manual orders is Pro. If most of your orders are phone orders or invoices paid later, it is the feature that pays for the licence.
See pricing