WPMake

How to Brand Your Post-Purchase Order Emails Without Touching Code

Generic WooCommerce emails look like generic WooCommerce emails — plain, unbranded, easy to mistake for spam. Post-Purchase Hub lets you fix that without writing a line of code. Why this matters more than it seems Order status emails are some of the highest-open-rate messages a store sends, because customers are actively waiting for them. A branded, clear email builds trust; a generic one just gets skimmed or ignored. Where to edit templates Go to WooCommerce → Post-Purchase Hub → Notifications. Each order status has its own template — confirmation, shipped, cancelled, return approved — editable independently. Adding your logo and colors Upload your logo once and it applies across every template. The accent color field controls buttons and the order-status highlight inside the email, so it’s worth matching to your site’s primary brand color. Personalizing the copy Merge tags like customer first name, order number, and estimated delivery date can be dropped into any template. A short, specific line (“Hey Sam, your order is on its way!”) reads far better than a form-letter greeting. Testing before you go live Use the built-in “Send test email” button to preview exactly what customers will see, including how it renders on mobile. Check this before publishing any change — email clients are notoriously inconsistent with formatting.

Setting Cancellation Windows and Return Policies That Actually Work

Your cancellation window and return policy are the two settings that shape almost everything customers experience with Post-Purchase Hub. Here’s how to set both well. Choosing a cancellation window by product type There’s no single right answer — it depends on how fast you fulfill. A few starting points: Standard physical goods: 30 minutes to 24 hours Perishables or made-to-order items: 5 to 15 minutes Digital downloads: usually no cancellation window at all, since delivery is instant Print-on-demand: 10 to 30 minutes, since production starts almost immediately Store-wide default vs. per-product override Set one sensible default for your whole catalog, then override it on individual products that need special handling. This keeps the settings screen simple while still covering edge cases like fast-turnaround custom orders. Writing a return policy people actually read Skip the legal boilerplate. State the return window in days, what condition items need to be in, and who pays return shipping — in that order, in plain language. Customers skim; a policy they can read in ten seconds gets followed more often than one buried in a wall of text. Syncing to your fulfillment workflow Every return request logs to your store-owner dashboard the moment it’s submitted, with the order details attached — so whoever handles fulfillment doesn’t need a separate handoff or spreadsheet to track what’s pending.

How to Customize Your WooCommerce Order Status Timeline (Step-by-Step)

WooCommerce’s default order status is a plain text list. Post-Purchase Hub replaces it with a visual timeline your customers can actually read at a glance — and you can customize every part of it. Where the timeline shows up By default, the timeline appears on the customer’s account page under each order, and again on the order confirmation screen right after checkout. Both use the same settings, so you only configure it once. Renaming and reordering steps The default steps are Placed, Confirmed, Packed, Shipped, and Delivered. If your fulfillment process looks different — say you have a “Quality Check” step, or skip “Packed” for digital goods — you can rename, remove, or reorder any step from the settings screen without touching code. Matching your store’s branding The timeline’s accent colors (completed, current, upcoming) are all adjustable, so it can sit naturally inside your theme instead of looking like a bolted-on plugin. Most stores match “completed” to their brand’s primary color and leave “current” as a warm accent so it’s easy to spot at a glance. Theme compatibility The timeline is built to inherit your active theme’s fonts and spacing automatically. If you’re using a heavily customized theme and something looks off, the settings screen includes a CSS override field for quick manual fixes. Once it’s styled the way you want, customers stop guessing where their order stands — and stop emailing you to ask.

Post-Purchase Hub Installation Guide: From Zip File to Live in 5 Minutes

A clean install is the foundation for everything else Post-Purchase Hub does, and there is genuinely not much to it: upload, activate, walk the seven-step wizard, place one test order. The wizard itself claims about two minutes, which is roughly right if you already know your shipping times. This guide covers the whole path from zip file to a live order timeline, with the exact screens and settings you will see along the way. What you need before you start It supports both High-Performance Order Storage and legacy post storage, so you do not need to change how WooCommerce stores orders first. Step 1: Install the plugin Two routes, both from Plugins → Add New. Search for WPMake Post-Purchase Hub and click Install Now, or choose Upload Plugin and select the zip. WordPress handles the extraction itself — no FTP, no unzipping, no file manager. Step 2: Activate Click Activate once the install finishes. Activation on its own changes nothing on your storefront — a notice appears pointing at the setup wizard, and until you finish that wizard your customers see exactly what they saw before. That is worth knowing if you are installing on a live store mid-morning: there is no window where the site looks half-configured. Step 3: Run the setup wizard Click Run the setup wizard from the notice, or start it from WooCommerce → Post-Purchase Hub. It opens with a question rather than a settings form, and your answer decides which of the remaining steps you are shown: The full path runs Welcome → Statuses → Delivery → Tracking → Actions → Display → Finish. Every step has a Skip this step link, and a skipped step keeps a sensible default you can change later on the settings screen. Two steps are worth slowing down for. Statuses is where each WooCommerce status you use — including custom ones added by other plugins — is mapped onto a stage the customer sees, and where you mark internal statuses as not shown. Delivery is where handling time and per-shipping-method transit times go; skip it and customers simply see no estimate, which is honest but not very useful. The timeline walkthrough covers both screens in detail. Step 4: Choose how it appears The Display step is the one that decides how much of your theme is involved, and the safe answer is the default: Stay additive unless you have a specific reason not to. The preview underneath is built from an actual order in your store, so what you see is what a customer would have seen. Then press Finish and go live. That is the moment customers start seeing timelines. Step 5: Find your settings Everything afterwards lives at WooCommerce → Post-Purchase Hub, with six tabs down the left and a Search settings… box that filters as you type: Read the Status panel before you walk away. Nothing in it is a setting — it is what the other tabs have added up to. It states whether setup is complete and your order pages are live, whether a tracking plugin was detected, whether an invoice plugin was found, whether any template conflicts exist, when the daily cleanup next runs, and whether the database is up to date. Step 6: Place a test order Log in as a test customer, place a small order, and open My Account → Orders. The order table gains a Progress column showing the current stage and its timestamp, and only the actions that actually apply to each order. Open the order and you get the full Order progress list — Placed, Confirmed, Packed, Shipped, Out for delivery, Delivered — each marked Done, In progress or Not yet, with an estimated delivery range underneath. Then move the order along a status from the admin and watch the timeline follow. One thing that surprises people: orders placed before you installed the plugin show their stages without dates. WooCommerce does not keep a history of status changes, so the plugin can only record them from the moment it is active, and it shows an honest blank rather than an invented date. Run wp wpmphub backfill-timeline from WP-CLI to fill in what can be derived from the dates WooCommerce does store. Optional: guest order lookup If a lot of your customers check out without an account, enable it under Settings → Guest Access, then put the [wpmphub_order_lookup] shortcode on a page and link it from your footer or your order emails. It is off by default, and it is built so that guessing reveals nothing: the customer enters an order number and billing email, and the signed link is emailed to the address already on the order, never to the address typed into the form. It is rate limited, with a link lifetime you control. First-run checklist Frequently asked questions Will this break my theme’s My Account page? It is designed not to. Additive mode adds sections through WooCommerce’s own hooks and leaves your templates alone. Full replacement is opt-in, and the plugin checks first whether your theme has customised those templates — if it has, replacement stays off rather than producing a broken page. Do I need a tracking plugin for it to be useful? No. Without one, customers see a delivery estimate worked out from your handling and transit times. If you do run Advanced Shipment Tracking or WooCommerce Shipment Tracking, real tracking data replaces the estimate automatically and you do not have to do anything. What happens to my data if I delete the plugin? Nothing is deleted unless you ask for it. Settings and request history stay in place, so reinstalling picks up where you left off. If you would rather it cleaned up after itself, switch on Delete all data when uninstalling under Settings → Advanced first — that one has no undo. Does it send anything to an external server? No. The plugin makes no outbound HTTP requests of any kind — no telemetry, no update pings, no remote fonts

Cutting “Where’s My Order” Emails During the Holiday Rush

Every December, the same message arrives dozens of times a day in slightly different words: hi, just checking on my order? It is the most common support email in ecommerce, it spikes exactly when you have the least time, and — this is the frustrating part — the answer is already sitting in your database. Here is how to make customers stop asking, without hiring anyone or writing a single reply. Why WISMO emails spike every holiday season Three things happen at once. Carriers get overloaded, so genuine delivery times stretch. Your own fulfilment slows, because volume is up and your pickers are the same people they were in October. And customer patience shortens, because a gift has a deadline attached in a way a normal purchase does not. The result is that an order which generated no questions in September generates three in December. The customer is not being difficult; they are managing a deadline with no information. A confirmation email from eleven days ago does not answer the question they are asking, and your order page — a status word and a table — does not either. So they write to you. And because you are busy, you reply slowly, which produces a second email asking whether you got the first one. Give them a live answer instead of a static one The fix is structural: put the answer where the customer already looks. An Order progress list on the order page shows every stage — Placed, Confirmed, Packed, Shipped, Out for delivery, Delivered — each marked Done, In progress or Not yet, with the real timestamp where one was recorded and an estimated delivery range underneath. It updates as the order moves, with no reply from anyone. The timeline in Post-Purchase Hub is built from your own WooCommerce statuses, including custom ones added by fulfilment plugins, so it reflects what is genuinely happening rather than a generic five-step template. The My Account order list also gains a Progress column, which matters more in December than any other month: a customer with four open orders sees all four states at once instead of writing to ask about each. Get the estimate right before the rush, not during it A timeline with no delivery estimate answers half the question. Under Settings → Timeline → Delivery estimates, the estimate is calculated from Handling time in business days and a Transit time per shipping method range, checked against the Working days card below — so a Friday-afternoon order does not promise Saturday delivery, and a closure does not quietly vanish from the maths. Three things to do before the season starts: If you run Advanced Shipment Tracking or WooCommerce Shipment Tracking, real tracking data replaces the estimate automatically as soon as a number exists, so the page keeps improving as the order progresses. Set expectations before they ask The page answers customers who go looking. Emails reach the ones who do not — but be realistic about what WooCommerce actually sends. There is no “shipped” notification in core; Processing order and Completed order are what you have, which makes their wording matter more than the defaults suggest. You do not need another tool for this: these are ordinary WooCommerce emails, so a pass through your email settings before the season is enough. Two changes matter most. Put {order_number} in the subject line, since customers with several open orders triage from the inbox list. And put a link to the order page in the footer text, so every email you have ever sent doubles as a route back to the live answer. Handle the ones that turn into cancellations Some WISMO messages are really cancellation attempts — a gift that will now arrive too late is no longer wanted. Those are better handled as a structured cancellation request than an email thread: the request arrives attached to the order with a reason, and you approve or decline it from one queue at WooCommerce → Requests. During a busy week that is the difference between fifteen minutes and an afternoon. It is worth reviewing your cancellation rules before the season for the same reason you review handling time. What works at normal volume is not always what works at four times the volume — particularly Response time you promise, which is shown to the customer at the moment they submit. What to expect This does not take support volume to zero, and any tool that claims it will is selling something. It removes the single most common message, which in most stores is a large share of everything arriving during December — leaving your inbox for the ones that genuinely need a person: the damaged parcel, the wrong address, the delivery that never came. That is the honest version of the win. The same information, delivered without a ticket, for the customers who just wanted to know where their order was.

Handling Order Cancellations During Flash Sales Without Losing Your Mind

Flash sales bring in orders fast, and cancellations arrive on the same curve about forty minutes behind them. Mis-taps, duplicate orders and plain buyer’s remorse all spike together, usually while you are busy watching the sale itself. None of that is avoidable. What is avoidable is handling it one email at a time. Here is what to change before the sale starts, and how to work the surge when it lands. Why cancellations spike during sales The predictable shape is useful: most requests arrive inside the first hour or two, not spread across the day. Plan for a burst, not a trickle. Tighten eligibility before the sale, not during it The instinct is to shorten the cancellation window for sale days. In Post-Purchase Hub there is no timer to shorten — eligibility is driven by Cancellable statuses on the Actions tab, a set of checkboxes over your WooCommerce statuses. Your lever is that list, not a clock. Three adjustments worth making the day before: Treat all three as temporary and write the original values down before you change them. The settings screen has a Search settings… box that filters as you type, so putting them back afterwards takes a minute. Your normal cancellation rules should return the moment the rush is over. Raise your handling time too This one gets forgotten and causes more support email than the cancellations do. Your delivery estimate is calculated from Handling time in business days, and a sale that triples your order volume does not triple your picking capacity. If picking takes two days during a sale, set handling time to two days for the sale period — or use Handling time per shipping method if only some methods are affected. A visible, honest estimate on the order timeline is what stops the second wave: the “when will this actually ship?” messages that arrive two days after the cancellations. Work the queue in batches Requests land at WooCommerce → Requests, with a count in the menu of everything waiting on you. During a sale this is the entire advantage: one screen with All types and All statuses filters, sortable columns, and Approve or Decline on each pending row. A rhythm that holds up under volume: If you were hoping to skip the review entirely, the honest answer on auto-approval explains why the plugin will not decide these for you — and why narrowing the status list does more for your workload than an approval rule would have. Check restock on approval before you start With Restock on approval switched on, every approved cancellation returns items to stock immediately. During a sale that is usually what you want — the stock goes back on sale while the sale is still running. It is only wrong if you reconcile inventory by hand, in which case a burst of approvals will quietly inflate your counts. Either way, remember that refunds are separate. Approving changes the order status; the refund is still done in WooCommerce, one click from the notification. Budget time for that after the rush — it is the step most likely to be forgotten in the noise. After the sale ends That last one is worth twenty minutes. Sale cancellations cluster around fixable causes far more often than normal ones do: a variant picker that confuses on mobile, a discount that reads ambiguously, a shipping cost that only appears at checkout.

Managing Returns as a Dropshipper (When You Don’t Hold the Stock)

A standard return flow assumes you can put your hands on the item: it comes back, you inspect it, you restock it, you refund. Dropshipping breaks every step. The parcel is somewhere in a supplier’s network, the return address is not yours, and the decision usually is not yours either. The friction is real and no plugin removes it. What you can remove is the part that actually costs you time — digging through email threads to work out which order a customer means and what the supplier already said. The extra handoff, and where things get lost A dropshipped return has a step a normal return does not: a conversation with the supplier that the customer cannot see and does not care about. That handoff is where requests stall. The customer emails you, you email the supplier, the supplier takes two days, and meanwhile the customer emails again because nothing has visibly happened. Two things make it worse. Return addresses and policies differ per supplier, so there is no single rule you can publish. And you often cannot confirm receipt yourself, which means the last step — the refund — waits on somebody else’s inbox. What Post-Purchase Hub does here, and what it does not Worth being precise, because it changes how you build the rest of your process. Post-Purchase Hub does not run an RMA workflow. It does not generate return labels, track a returned parcel, or issue refunds — the readme is explicit that it never touches a payment gateway, and it generates no PDFs of any kind. What it gives you is the intake and the record. Get help with this order is a message form that reaches you with the order number, status and items already attached. Cancellation requests — which for a dropshipper are far more valuable than returns, for the reason below — arrive in a queue at WooCommerce → Requests with the customer’s chosen reason, their note, and an Internal note (not shown to the customer) box on the decision screen. That internal note does more work for a dropshipper than for anyone else. It is where “supplier confirmed 14 Mar, RMA #4471” lives, attached to the request rather than buried in a mail thread — and because requests also surface on the WooCommerce order screen, the context is on whichever page you happen to open. If you want that history to survive, check Keep resolved requests for on the Advanced tab: it is a number of days, and zero keeps everything. Catch it before it ships, not after The highest-leverage change for a dropshipper is not a better return process. It is intercepting more orders before the supplier dispatches them, because a cancellation costs you nothing and a return costs shipping in both directions plus a supplier conversation. Eligibility is based on order status, so the question is: how long does an order sit with you before it is forwarded? That gap is your real window. Leave Restock on approval off unless you genuinely mirror supplier stock in WooCommerce. For most dropshippers the stock number is nominal, and restocking on approval just makes it less accurate. The queue is reviewed by hand either way, which is the right shape when a supplier has to be consulted before you can say yes. Set return windows around the supplier, not yourself The most common dropshipping policy mistake is copying a normal store’s thirty days from delivery. That assumes the customer received the item roughly when you thought they did, and that a return reaches somewhere useful in a few days. Neither is safe when a supplier ships from overseas. Build the window from the actual chain: supplier dispatch time, transit, plus the days a return takes to reach the supplier and be confirmed. Then publish a window you can hold on the slow version of that chain, not the fast one. A shorter, reliable window generates far fewer disputes than a generous one you cannot honour. Make the delivery estimate honest and half the problem disappears A large share of dropshipping returns are not product problems. They are timing problems: the customer expected the parcel in a week, it took three, and by the time it arrived they no longer wanted it. So set Handling time and the Transit time per shipping method ranges from your supplier’s real performance, not the optimistic figure on their rate card. The timeline then shows a window the customer can plan around — and where a method has no transit time configured it shows no estimate at all, a deliberate blank rather than a guess. Uncomfortable to publish, much cheaper than a missed promise. If you use a tracking plugin, real tracking data replaces the estimate as soon as the supplier provides a number — which is usually the point at which dropshipping customers stop worrying. Advanced Shipment Tracking and WooCommerce Shipment Tracking are supported out of the box, and other sources can be wired in through a filter. Setting expectations is the actual strategy Being upfront about longer processing, paired with a live status the customer can check themselves, does more for trust than a short window you cannot consistently meet. Say the shipping time on the product page, repeat it in your order emails, and show it on the order page. Customers who would have returned out of impatience mostly self-select out before buying — a better outcome than a return you have to process. Then keep the reason data. A month of cancellation and help-request reasons usually points at one supplier, one product, or one shipping method doing most of the damage. See setting cancellation windows and return policies for how to turn that into a policy you can actually defend.

Post-Purchase Hub for Subscription Box Businesses

Subscription boxes have a support problem one-off stores do not: the same customer generates a new order every month, and each of those orders can produce the same questions. Where is this month’s box? Can I skip it? I meant to cancel before you charged me. Multiply that by a few hundred subscribers and the post-purchase experience stops being a nice-to-have. Here is where Post-Purchase Hub fits — and, just as importantly, where it does not. What this handles, and what it does not Be clear about the boundary, because it decides what you still need. Your subscriptions plugin owns the subscription itself: the billing schedule, pausing, skipping a cycle, and cancelling the subscription. Post-Purchase Hub works on orders — including every renewal order that subscription generates. That turns out to be most of where the support load comes from. Subscribers rarely ask about the schedule; they ask about the specific box that was supposed to arrive last Tuesday. Why cancellations need to be easy A customer who cannot find a clear way to stop paying you does not shrug and stay subscribed. They call their bank. A chargeback costs more than the box was worth, in fees and in processor standing, and unlike a cancellation it is not a conversation — you find out after the decision has been made. Every friction point between “I want to stop” and stopping raises the odds of that outcome. So the goal is not retention through obstruction. It is making the exit obvious enough that it stays a cancellation, and visible to you early enough to respond. The dialog states plainly that it is a request and carries the response time you configured. It asks for a Reason from a dropdown and offers an Anything else? (optional) box — which gives you something an email thread never does: structured, stored data on why people leave. One thing to set up alongside it: the customer-facing Cancelled order email in WooCommerce is often disabled by default. If you approve a request and that email is off, the customer gets silence at the most sensitive moment in the relationship. A pass through your email settings fixes it in a minute. Renewal orders are where the questions come from A subscription box has a rhythm, and subscribers learn it fast. The box that normally arrives on the 8th and has not arrived by the 11th generates a message. Every month. From different people. An Order progress list on each renewal order answers that without a reply. It is built from your own WooCommerce statuses, so if your fulfilment has a packing week and a dispatch day, the statuses you already use map onto the stages customers see rather than being replaced by a generic “Processing”. The delivery estimate matters more here than in a normal store, because subscribers compare this month against last month. Set Handling time to what your packing cycle actually takes and a Transit time range on each shipping method, and the estimate holds month after month. Miss it consistently and you have trained a few hundred people to check in. The order list is the subscriber’s dashboard A long-running subscriber has a year of orders in their account. The My Account list gains a Progress column showing each order’s current stage and timestamp, which turns that history into something readable at a glance — and it is the page to send them to when they ask about a box from three months ago. Two of the self-service actions earn their place immediately for subscription businesses. Invoice removes the recurring “can you send me a receipt for last month” message, especially from business subscribers — it links to whatever your invoice plugin generated, and falls back to a printable order page when there is none. Get help with this order gives you a support intake that arrives with the order number, status and items already attached, instead of an email saying “my box” that needs three replies to identify. Reducing “I forgot to cancel” disputes The most common subscription complaint is being charged for a cycle the customer meant to stop. It is also the one most likely to become a chargeback, because the customer feels caught rather than served. Two things reduce it. A renewal reminder a few days before billing — your subscriptions plugin sends this; make sure it is on and that it states the date and the amount plainly. And a genuinely visible route to cancel, rather than one buried behind a support form. Where a charge has already gone through, the cancellation request on that renewal order gives the customer somewhere to go that is not their bank. You still make the decision, and the refund remains a WooCommerce action on the order — the plugin never touches your gateway. Setting the rules for a subscription store Renewal orders have a rhythm that makes the cancellation rules easier to set than in a general store. Requests are eligible based on order status, so the practical question is which status a renewal order sits in before it enters your packing run — that gap is your real window, and for most box businesses it is generous. Then spend twenty minutes on your order emails. For a subscription business those arrive every single month, which makes them the most-seen thing your brand produces — and the easiest place to make a box feel like a membership rather than a transaction.

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

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. 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: 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. 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: 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. 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. 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. 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. 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 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.

Auto-Approving Cancellations and Returns: What Post-Purchase Hub Does Instead

If you have just switched on self-service cancellation requests, the next question is almost always the same: can I approve the easy ones automatically? It is a fair thing to want. Reviewing forty low-value cancellations a week is not a good use of anyone’s morning. The honest answer is that Post-Purchase Hub will not auto-approve anything, and the readme is unusually direct about it: “No, and it never will.” Here is the reasoning, and what to do instead — which, in practice, gets you most of the speed you were after. Why nothing is approved automatically The plugin’s position is that a cancellation request lands in a queue and nothing happens to the order until a person approves it. No rule engine, no “under fifty dollars goes through”, no exceptions. The Actions settings say the same thing twice, in the card description and again in the help text under the status checkboxes: a request is never an automatic cancellation. The reasoning holds up. Approving a cancellation is not a data operation — it is a claim about the physical world. Has the parcel been picked? Has the label printed? Has it already left with the courier? WooCommerce order status is a decent proxy for that, but only a proxy, and the gap between the two is exactly where an automatic approval does damage: stock returned for a parcel already on a van, a customer told their order is cancelled while it is in transit to them. The second reason is scope. The plugin never touches a payment gateway and never issues a refund; approving changes the order status and optionally restocks. An automatic approval would therefore produce a cancelled order that is still fully paid, quietly, with nobody aware of it. That is a worse outcome than a request sitting in a queue for two hours. What the rules actually do There is real automation on the Actions tab — it just runs at the other end of the process. Instead of deciding requests for you, the rules stop requests you would have declined from ever being submitted. Tighten the status list and the queue shrinks dramatically — usually more than any approval rule would have saved you, because a request that is never submitted costs nothing at all. Choosing those statuses well is the highest-leverage half hour in the whole setup. Making the review itself fast The remaining work is the queue, and it is built to be worked in batches rather than one email at a time. It sits at WooCommerce → Requests, with a count in the menu of everything waiting on you. Each row carries the request number, the order, the customer, the type, the reason they chose, how long it has been waiting and its current status. Type, age and status all sort, so “oldest pending cancellations” is one click. A routine that works for most stores: Handled this way, a queue of forty is fifteen minutes — and unlike an inbox, it tells you at a glance whether anything is outstanding. A sensible policy, without a rule engine What people are really asking for when they ask about auto-approval is: how do I stop thinking about the easy cases? That is a policy question, and you can answer it without any automation. Start conservative and widen as the history accumulates — which means keeping the history. On the Advanced tab, Keep resolved requests for sets how many days a resolved request survives the daily cleanup, and zero keeps everything. If you intend to review your own decisions, zero or a generous number is the setting you want. If you genuinely need automation Be realistic about what is on offer. The plugin ships filters throughout — the stage map, action availability, tracking detection and invoice sources are the documented ones — but there is no supported hook advertised for deciding requests, and building one means taking on precisely the responsibility the default design was avoiding. The PHP source and test suites are public on GitHub if you want to judge that for yourself. And a refund still will not happen by itself. Where to go next The queue only gets busy if requests are getting through, so start upstream: setting the cancellation rules first, then handling the spike during a flash sale. If you fulfil through a supplier, returns as a dropshipper covers the extra handoff that makes fast approvals harder.