Some orders should not go straight through: a trade account with a credit limit, a regulated product, an order big enough to want a second look. This plugin holds them at a status of its own until somebody approves them.
Three things this plugin gets right
* Money is never taken before a human says yes. When an order needs approving, no payment method that takes money is offered at the checkout at all — there is no path through it that ends in a charge. The alternative some plugins take is to let the shopper pay and refund them if the answer is no: that is a refund fee you pay, a card statement your customer has to explain, and in some places a payment taken for goods that were never going to be supplied. * Approving sends the link WooCommerce already has. The customer gets $order->get_checkout_payment_url() — core's own pay-for-order link, which already carries the order key. A plugin that mints its own token has written a second, weaker guess at something core does correctly. * Declining lets the stock go. A held order that keeps reserving inventory forever is how a shop with fifty declined orders stops being able to sell anything, and the merchant blames the stock count rather than the plugin.
What you get
* An "Awaiting approval" order status, registered through WordPress' and WooCommerce's own machinery — so it shows up in the order dropdown, the list-table filters and the reports with nothing re-implemented * Approve and Decline on the order screen and as bulk actions, on both order screens (the classic table and HPOS) * Hold every order, orders over an amount, orders from chosen customer roles, or orders containing chosen products or categories (sub-categories count) * Your own wording for the checkout method and for both emails, with {order_number}, {first_name}, {total}, {pay_link}, {reason} and {site_title} * A reason box on the decline, sent to the customer
Careful about the details
* An awaiting order is kept out of WooCommerce's "needs payment" list, so no pay button appears on the received page and nobody can walk past the approval. * "Over an amount" is strictly over — an order for exactly the threshold goes straight through, which is the off-by-one a merchant notices first. * A guest holds no role, so a role rule never reaches one; the screen says so rather than letting a shop find out. * Only an order actually waiting can be approved, so an approve link clicked twice cannot push a paid order back to pending payment. * Who decided, and when, is written onto the order.
Every license includes
- One year of updates and priority support, delivered straight to your WordPress dashboard.
- Use on 1, 5 or 25 sites depending on your license — local, staging and development sites are always free.
- 30-day money-back guarantee — full refund, no questions asked.
- Keeps working after expiry — if you choose not to renew, the plugin keeps running exactly as installed; it simply stops receiving updates and support until you do.
Requires WordPress 6.4+ · PHP 7.4+ · tested up to WordPress 6.8. Works with the classic and block checkout alike.

Ryan C. (verified owner) –
Can’t fault it so far. The Orders & Inventory options are a crowded field and this is the one I settled on. It just works, and that’s all I ask.
Daniel Carter (verified owner) –
I would buy it again, with slightly lower expectations. There is one thing I would move on the Order Approval screen. One of the better Orders & Inventory plugins I have tried. Four rather than five, but only just.
Julien P. (verified owner) –
Ça fonctionne. Ce n’est pas toujours élégant. Order Approval est une extension raisonnable. Quatre étoiles méritées.
Peter S. (verified owner) –
Still doing exactly what it did the week I bought it. Order Approval survived a WooCommerce update without complaint. Solid purchase.
Paola B. (verified owner) –
Va avanti da solo e non ci penso più. Order Approval non ha bisogno di sorveglianza. Lo consiglio.