WooCommerce only knows one kind of refund: money going back the way it came. Plenty of refunds don’t work like that. The customer takes store credit, or a gift card, or just the right item instead of the wrong one. However it got resolved, the order can either say “refunded” or say nothing. Both are wrong.
WooCommerce Gift Cards shows the problem well, because it already does the honest thing. It issues the credit, then creates a refund so the order reflects what happened. Then Xero sees a fully refunded order and voids the invoice. Analytics pulls the amount out of net sales. But no money left the business. The shop is holding cash and owes goods later, which is close to the opposite of what got recorded. Gift Cards can’t fix this on its own, and neither can the Xero integration, because there’s no field saying this refund was a different animal.
So: a settlement method on refunds. Money back to the original payment method (the default, what happens today), store credit, gift card, exchange, settled outside WooCommerce. Extensions set it when they create the refund. Integrations read it.
I’m not asking Core to build store credit, gift cards, returns, or exchanges. Extensions do that already and some do it properly. Gift Cards, Smart Refunder, Kestrel Account Funds, Returns for WooCommerce. This should make their lives easier, not take work off them. And this isn’t about cash refunds on card orders, which is a separate argument I’m not making here.
Why Core rather than an extension: it’s every credit extension times every accounting integration, all reading Core’s data model, none of them able to settle on a vocabulary that doesn’t exist. Core already works this way for gateways and shipping. It doesn’t implement them, it defines the contract. This is a contract, and a small one next to building returns natively.
The “Shipped” order status request (73 votes) is arguably the same complaint from another direction, order status doing two jobs at once.
This came from WooPayments feature requests: https://woocommerce.com/feature-request/add-manual-refund-option-to-woopayments-mark-order-refunded-without-processing-payment-refund/
Open
Last updated: August 4, 2026
Log in to comment on this feature request.
Strongly agree with this. We run a designer resale store and regularly settle refunds via store credit or partial swaps rather than the original card. Right now the order either shows fully refunded (misleading) or unmarked (breaks VAT/bookkeeping reconciliation). A shared settlement_method field extensions could set would fix this properly instead of every credit plugin building its own workaround.