WPMake

← Back to BlogHow to Set Up Self-Service Order Cancellations in WooCommerce (Step-by-Step)TUTORIAL

How to Set Up Self-Service Order Cancellations in WooCommerce (Step-by-Step)

⏱ 7 min read  ·  👤 david  ·  Sep 1, 2026

Every cancellation that arrives by email costs you the same four minutes: read it, find the order, check whether it has shipped, reply. Post-Purchase Hub moves the front half of that onto the customer’s own order page. They submit a structured request with a reason attached; you get a queue with two buttons instead of an inbox thread.

What it does not do is cancel anything on its own, or issue a refund. Both are deliberate, and understanding why is most of what you need to set this up well.

Why manual cancellation handling costs more than it looks

A single cancellation by email spans three tools: the inbox, the WooCommerce order screen, and whatever you use for refunds. None of them know about each other, so you carry the context in your head between them. Do it ten times in a week and it is an afternoon.

The expensive part is not the decision — that usually takes seconds. It is the retrieval: working out which order the email refers to, checking its current status, remembering whether this customer already asked once. A request that arrives already attached to the order removes all of it.

Step 1: Install and run the wizard

From Plugins → Add New, install and activate the plugin, then run the setup wizard. Nothing reaches your storefront until you finish it. The full installation guide covers the requirements and all seven steps if you want the detail.

WordPress admin notice confirming Post-Purchase Hub is installed, with a Start the setup wizard button
Install, activate, and the plugin walks you into the setup wizard.

Step 2: Choose which actions customers get

The wizard’s Actions step — later WooCommerce → Post-Purchase Hub → Actions — asks what a customer can do about an order without emailing you. There are four, each an independent toggle:

  • Request cancellation — the customer gives a reason and an optional note, and it becomes a request you approve or decline from the queue.
  • Buy these again — re-adds a past order to the cart, but only after a screen showing what changed: what is out of stock, what no longer exists, what costs more.
  • Invoice — links to the invoice your invoice plugin already generated. It supports PDF Invoices & Packing Slips, and falls back to the printable order page when no invoice plugin is present. The plugin generates no PDFs of its own.
  • Get help with this order — a message form that reaches you with the order number, status and items already attached, so you can answer without asking what it is about.
Setup wizard step with toggles for request cancellation, buy these again, invoice, and get help with this order
“You can change any of this later” — and the wizard says plainly that cancellation is always a request you approve, never an automatic action.

Turning an action off is not cosmetic: it is removed from the customer’s order pages and refused at the API, so a hidden button cannot be submitted anyway. Reorder and invoice are close to risk-free. Cancellation requests are the one worth configuring properly before you go live.

Step 3: Set the cancellation request rules

This is the core of the setup, and it works differently from the countdown timer most people expect. There is no “cancellable for 30 minutes” setting. Eligibility is driven by order status: Cancellable statuses is a set of checkboxes over your WooCommerce statuses, and the button disappears the moment an order leaves them.

Post-Purchase Hub Actions settings showing cancellable statuses, cancellation requests per order, wait between requests, response time you promise and restock on approval
The Actions tab in full: which statuses accept a request, how many per order, the wait between attempts in hours, the response time you promise, and restocking.

That is a better model than a timer, because it tracks reality: an order that is already packed should not be cancellable at minute eleven just because your window said thirty. In practice your effective cancellation window is however long orders sit in the statuses you ticked before your team moves them on — worth measuring before you set anything. There is more on choosing them well in setting cancellation windows that actually work.

Three supporting fields sit alongside it:

  • Cancellation requests per order — how many times one order may ever be the subject of a request. Stops one frustrated customer submitting the same thing eight times.
  • Wait between requests — hours a customer must wait before asking again about the same order.
  • Response time you promise — in hours. It is shown to the customer when they raise the request and repeated in the confirmation email, so promise what you can keep.

Restock on approval is the fourth. Switched on, approving a cancellation returns the items to stock. Refunds stay in WooCommerce, one click from the notification — the plugin never touches a payment gateway.

Step 4: See what the customer sees

Log in with a test account, place an order, and open My Account → Orders. Alongside the new Progress column, each order shows only the actions that apply to it: Request cancellation on eligible orders, Buy these again on completed ones, View or print order and Get help with this order throughout.

Front-end My Account orders table with a Progress column and Request cancellation buttons on eligible orders
Nobody is offered a button that leads to a refusal — an order outside your cancellable statuses simply does not show one.

The dialog itself is doing quiet but important work. It opens with one sentence — “This sends a request to the store — it does not cancel your order right away. We usually respond within 24 hours.” — then asks for a Reason from a dropdown and offers an Anything else? (optional) box before Send request.

Front-end Request cancellation dialog with a reason dropdown and an optional notes field
That opening sentence carries the response time you configured, and it removes most of the “did it work?” follow-ups a silent confirmation would generate.

Step 5: Work the queue

Requests land under WooCommerce → Requests, with a count in the menu of everything waiting on you. The list has All types and All statuses filters and sortable columns for request, order, type, age and status — so you can pull the oldest pending cancellations to the top in one click.

Post-Purchase Hub request queue listing requests with request number, order, customer, type, reason, age, status and approve or decline actions
Request, order, customer, type, reason, age, status — and Approve or Decline on each pending row.

Open one and you get the order, a link straight to it, the items, the customer’s chosen reason and their note, and an Internal note (not shown to the customer) box above the Approve and Decline buttons. Approving changes the order status and optionally restocks; declining leaves the order exactly as it was.

Admin view of a single cancellation request showing the order, items, customer reason and note, an internal note field and Approve or Decline buttons
Everything needed for the decision on one screen — including a note the customer never sees.

Requests also appear on the WooCommerce order screen itself, so you are never surprised by one you did not know about.

A checklist before you go live

  1. Cancellable statuses ticked, and checked against how fast you actually fulfil
  2. Cancellation requests per order and wait between requests set
  3. Response time you promise set to something you can meet on a bad day
  4. Restock on approval decided
  5. A test request submitted as a customer and approved from the queue
  6. Order emails reviewed — see branding your post-purchase emails

Frequently asked questions

Does it cancel orders automatically?

No, and it never will. A request lands in the queue and nothing happens to the order until you approve it. If you were hoping to automate the approvals themselves, the honest answer about auto-approval is worth five minutes.

Does it issue refunds?

No. Approving a cancellation changes the order status and optionally returns items to stock. The refund is done in WooCommerce, on the order, one click from the notification.

Why can one of my customers not request a cancellation?

The button hides itself, correctly, when the order is not in a cancellable status, when a request is already pending on it, when the order has hit its per-order limit or is inside the waiting period, or when you have switched the action off.

Where to go from here

Cancellation requests are one half of the picture; visibility is the other. Pair this with a customised order status timeline so customers can see where an order stands before they think about cancelling at all. If you are heading into a flash sale or run a subscription box, both have wrinkles worth reading first.

How to Set Up Self-Service Order Cancellations in WooCommerce (Step-by-Step)