WPMake

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.

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

Default WooCommerce emails look exactly like default WooCommerce emails: a coloured header, a grey table, no logo, nothing that says who sent it. They are also, by a wide margin, the highest-open-rate messages your store will ever send — because the customer is actively waiting for them. Fixing that takes about twenty minutes and no code. Here is the whole path, and one thing to understand first about where these emails come from. These are WooCommerce emails, not plugin emails Worth knowing before you go looking for a template editor. Post-Purchase Hub does not fork your emails or add a parallel notification system. Its Emails tab exists to tell you that and send you to the right screen — the card is headed “Where these emails are configured”, and the only control on it is a button labelled Open WooCommerce email settings. This is a good thing twice over. Anything you style once applies to every transactional email your store sends, not just the post-purchase ones. And if you ever remove the plugin, your email branding stays exactly where it was. Where the settings actually live Go to WooCommerce → Settings → Emails. The Email notifications section lists every transactional email your store can send, with a toggle, its content type, its recipients and a Manage button on each row. Two things are worth noticing on this screen before you touch any styling. First, some emails are off by default, and the customer-facing Cancelled order email is often one of them. If you have switched on self-service cancellation requests, that is the message a customer gets when you approve one — leaving it disabled means approving a request silently, which produces exactly the follow-up email you were trying to avoid. Second, there is no “shipped” email in core WooCommerce. Completed order is the closest thing, which is why its wording matters more than the default text suggests, and why a live order timeline does the work an email cannot. Step 1: Fix the sender details first The least glamorous step and the one that matters most for deliverability. Set the “From” name to your store name as customers recognise it, and the “From” address to a real, monitored address on your own domain. A no-reply address on a domain that does not match your site is the fastest route into a spam folder, and it throws away every reply a customer might have sent you. WooCommerce also recommends a dedicated SMTP setup here rather than relying on your host’s mail function. Step 2: Add your logo and colours Below the notification list is the Email template section — “Customize your WooCommerce email template and preview it below.” Recent WooCommerce versions give you: Underneath sits the Color palette, with an Auto-sync with theme changes toggle that pulls colours from your active theme. Switch it off to set them by hand: If your store is on an older WooCommerce release you will see the earlier equivalents — Header image, Base colour, Background colour, Body background colour, Body text colour. The advice is identical; only the labels moved. Use the footer text for the things customers look for when something has gone wrong: store name, a support address, and a link to your returns policy. It appears on every email, which makes it the cheapest support deflection you will ever set up. Step 3: Rewrite the subject lines and headings Open any email with Manage and you get its recipient, subject, heading and additional content. WooCommerce placeholders work in the subject and heading fields, and the list is short — it is worth knowing exactly what is available rather than guessing: There is no customer-name placeholder in the subject line, so the common advice to open with a first name does not apply here. What does work: Step 4: Preview, then send yourself a real one The Email preview section lets you pick any template from a dropdown and view it desktop or mobile, and there is a Send a test email button that will deliver it to any address you like. Use both — the preview catches a logo that is too large or an accent colour that eats your text; the test email catches how a real client renders it. Then do the last mile properly: place a test order on your own store, move it through each status from the admin, and read every email as it arrives. Check it on a phone as well as a desktop. Email clients are relentlessly inconsistent, and most of your customers are reading on a phone. What emails cannot do, and what to use instead An email is a snapshot of one moment. The question customers actually have — where is my order right now — is better answered by a live page than by a message sent three days ago. Set up the order status timeline alongside your emails, then link to it from the footer text, so every email you have ever sent doubles as a route back to the live answer. That combination is what actually reduces inbox volume: fewer “where is my order” emails during a busy season, because the answer is one click away from every message you have already sent. A quick checklist

Setting Cancellation Windows and Return Policies That Actually Work

Two policies shape almost everything customers experience after checkout: how long they can change their mind, and what happens when the parcel arrives and they do not want it. Most stores write both as a wall of legal text nobody reads, then handle every case by email anyway. Here is how to set both so they hold up — starting with the thing most merchants get wrong about cancellation windows. Your cancellation window is not a timer The instinct is to set a clock: cancellable for thirty minutes, then locked. Post-Purchase Hub deliberately has no such setting. Eligibility is driven by order status. Under WooCommerce → Post-Purchase Hub → Actions, Cancellable statuses is a row of checkboxes over your own WooCommerce statuses — Pending payment, Processing, On hold, Completed, Cancelled, Refunded, Failed, Draft, plus any custom ones your other plugins add — and the button vanishes the moment an order moves out of the ones you ticked. Once you sit with it, the status model is the better one. A timer can leave a packed, labelled parcel technically cancellable at minute twenty-nine. Status tracks what has actually happened to the goods. Your real cancellation window is therefore however long orders sit in your ticked statuses before someone picks them — which means the lever is your fulfilment workflow, not a settings field. Choosing statuses by how fast you fulfil Pull up a week of orders and look at how long each stayed in a status before moving. That number is your window. Then choose accordingly: If the numbers say your real window is three minutes, that is not a reason to fake a longer one. It is a reason to add a short holding status before picking — custom statuses appear in this list like any other — which buys real time and keeps the button honest. The three supporting fields Restock on approval is the fourth switch. Turn it on if your stock counts are accurate; leave it off if you reconcile stock by hand, otherwise approvals will quietly inflate your inventory. Either way refunds are unaffected — those stay in WooCommerce, one click from the notification. Returns are a policy, not a plugin setting Worth being clear about this, because it changes how you write the policy. Post-Purchase Hub handles cancellation requests. It does not run an RMA workflow, generate return labels, or issue refunds — the readme is explicit that it never touches a payment gateway. What it gives you is the intake: the Get help with this order action, a message form that reaches you with the order number, status and items already attached, instead of a free-form email you have to decode. So the return policy itself is yours to write and yours to run. The plugin’s job is making sure the request reaches you with context attached. Writing a return policy people actually read Skip the boilerplate. Three facts, in this order, in plain language: Then add the fourth thing almost nobody writes down: what happens next, and how long it takes. “We refund within three working days of the parcel arriving with us” prevents a whole category of follow-up email. Customers skim. A policy readable in ten seconds gets followed more often than a thorough one nobody finishes. If you fulfil through a supplier, build the window around the supplier’s shipping time rather than your own — a thirty-day policy that assumes three-day delivery falls apart when the parcel takes two weeks to arrive. The dialog is your policy in practice Whatever you write on the policy page, the sentence customers actually read is the one in the request dialog: “This sends a request to the store — it does not cancel your order right away. We usually respond within 24 hours.” The number in it is the Response time you promise field, which is a good reason to keep that field honest. That reason list is worth paying attention to. Requests are stored with the reason attached, so a month of them usually points at something fixable — a misleading product photo, a delivery estimate that reads slower than it is, a variant picker that misbehaves on mobile. Keep your delivery estimates honest A cancellation policy is easy to defend when the delivery promise beside it is accurate. Under Settings → Timeline → Delivery estimates, handling time and per-shipping-method transit ranges produce the window customers see, and the Working days card below excludes your non-working weekdays and any holiday dates you list. An estimate that consistently holds removes most of the impatience that drives cancellations in the first place. Where to go next If you have not set the actions up yet, start with the self-service cancellation walkthrough. For the queue side — how to work requests quickly without pretending you can automate the decision — see cancellation request rules and the auto-approval question. If you are about to run a sale, flash sale cancellations covers what changes when volume spikes. Subscription stores have a rhythm of their own — running a subscription box on Post-Purchase Hub covers what changes when the same customer orders every month.

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

WooCommerce ships with one of the least informative order screens in ecommerce: a status word, a table of line items, and nothing that tells a customer what happens next. Post-Purchase Hub replaces the status word with an Order progress list built from your own order statuses, plus a delivery estimate wherever you have given it your shipping times. This walkthrough covers where the timeline appears, how the status-to-stage mapping actually works, how the estimate is calculated, and what to do when your theme is involved. Where the timeline shows up Two places, configured once. The single order page gets the full list. The My Account order list gains a Progress column showing the current stage and its timestamp, so a customer with several open orders sees the state of all of them without opening any. Every stage carries one of three sub-labels — Done, In progress, or Not yet — and the dates shown are real, recorded as the status changes happened rather than calculated backwards. If you want the timeline somewhere else, the [wpmphub_orders] shortcode and the Order timeline block render it on any page; each signed-in customer sees their own orders. Mapping your statuses onto stages This is the step that matters most and the one people rush. The stages themselves are a fixed vocabulary — Placed, Confirmed, Packed, Shipped, Out for delivery, Delivered, plus the terminal states. What you configure is the map: under Settings → Timeline → Timeline stages, every WooCommerce status your store uses gets a dropdown, and you choose which stage it lands on. The defaults are sensible — Pending payment maps to Placed, Processing to Confirmed, Completed to Delivered. Two rules make the rest work: What you cannot do is invent your own stage names — the customer-facing vocabulary is fixed. In practice that matters less than it sounds, because the mapping is many-to-one: three internal statuses that all mean “we have it and are working on it” can all land on Confirmed. Delivery estimates, and why yours might be blank The estimate lives under Settings → Timeline → Delivery estimates and is built from two numbers you supply. Both are calculated against the Working days card below them: Non-working days is a set of weekday checkboxes for the days you do not ship on, and Holidays is a plain list, one date per line as YYYY-MM-DD. Everything listed there is excluded from every estimate. The single most common question about the timeline is why no estimate appears. Almost always the answer is the same: the shipping method used on that order has no transit time configured, and a method with no transit time shows no estimate at all — a deliberate blank rather than a guess. Set it, and the estimate appears. If you run Advanced Shipment Tracking or WooCommerce Shipment Tracking, real tracking data steps in front of the estimate automatically as soon as a tracking number exists — and any other source can be wired in through a filter. Until then the customer sees your honest estimate rather than a fabricated tracking number, which is worth saying plainly in your order emails too. Placement, and what to do about your theme There is one placement setting, on the General tab, and it has two values: The advice here runs the opposite way to the usual instinct. If your theme heavily customises the order templates, that is a reason to stay additive, not to switch. Full replacement looks different in every theme and the plugin describes it as the single biggest source of support tickets for plugins of this kind — so it also refuses to turn on while it detects that your theme has customised those templates, rather than producing a broken page. The Template conflicts line in the Status panel is where you find out. The wizard’s Display step asks the same question during setup, with a preview built from a real order in your store. For finer visual adjustments, the plugin exposes filters throughout — including the stage map itself — and its markup responds to ordinary CSS in your child theme. Older orders show stages but no dates WooCommerce does not keep a history of status changes, so a plugin can only record them from the moment it is installed. Orders that predate the install show their stages without timestamps rather than showing invented ones. Running wp wpmphub backfill-timeline from WP-CLI fills in what can be derived from the dates WooCommerce does store. A quick check before you call it done Where this pays off A readable timeline is the single biggest lever on “where is my order” email volume — see cutting WISMO emails during the holiday rush for what that looks like in a busy season. Pair it with self-service cancellations and you have covered both halves of what customers actually want after checkout: visibility and control.

How Small WooCommerce Stores Can Offer an Amazon-Level Post-Purchase Experience

Amazon set the expectation for what happens after checkout, and it did not do it with drones. It did it with a page that always answers the question — and a set of buttons that let customers fix their own problems at two in the morning without talking to anyone. A small WooCommerce store cannot match Amazon’s logistics. It can match most of the experience, because the experience is mostly information design. What big retailers actually get right It is tempting to assume the advantage is speed. It is not. Plenty of Amazon deliveries take a week and customers are fine with it, because they knew it would take a week and could watch it happening. The advantage is certainty. At any moment the customer knows what stage their order is at, roughly when it arrives, and what they can do about it. None of that requires a warehouse network. It requires that your store stops treating order status as internal data. The three things customers actually want Only the first is about logistics. The other two are interface, and interface is where a small store competes on level ground. Where WooCommerce leaves a gap Out of the box, WooCommerce gives a customer an order number, a line-item table and a status word. There is no sense of sequence, no estimate, and nothing to click. Every question after that page — where is it, can I stop it, can I have it again — has exactly one route: your inbox. That is the real cost of the default experience. Not lost sales; lost hours. Every WooCommerce store owner has answered “has my order shipped yet?” more times than they can count, and every one of those answers was already in the database. How self-service closes the gap Post-Purchase Hub gives a small store the same core mechanics on the pages your theme already draws: an Order progress list built from your own order statuses, a delivery estimate worked out from your real handling and transit times, and self-service actions on the orders that qualify for them. Four actions cover most of what customers want to do alone: Request cancellation, Buy these again (which shows what changed — out of stock, discontinued, more expensive — before it re-adds anything), Invoice, and Get help with this order, which reaches you with the order number, status and items already attached. Each is an independent toggle, and each only appears where it genuinely applies, so nobody is offered a button that leads to a refusal. Honest beats impressive The one place where copying Amazon goes wrong is the delivery promise. Big retailers commit to a date because they control the chain. You mostly cannot, and a confident date you miss does more damage than a range you keep. So the estimate is built from numbers you actually control — handling time in business days, transit time as a range per shipping method, and your own non-working days and holidays excluded from the maths. Where the data is not there, the timeline shows a blank rather than inventing a date. If you run a tracking plugin, real tracking data steps in front of the estimate the moment it exists. Setting the timeline up takes about fifteen minutes, most of it spent mapping your own statuses. The same honesty applies to cancellations. Amazon can cancel instantly because its systems know precisely where every parcel is. A small store cannot, so a cancellation is submitted as a request you approve — and the dialog says so in its first sentence, along with the response time you promised. Customers are entirely fine with “we usually respond within 24 hours”. What they are not fine with is silence. Where this actually pays off The obvious win is fewer support emails, and it is real — “where is my order” is usually the single most common message a store receives, and a live page removes most of it. During a holiday rush that difference is measured in hours per week. The less obvious win is repeat purchase. A customer who has been through one order with full visibility and one self-service action that worked has learned something no amount of homepage copy conveys: that buying here is low-risk. That is what brings them back, which is why the biggest effect shows up on the second order rather than the first. There is a third, quieter benefit. Every cancellation request arrives with a reason attached and is stored that way, so a month of them is the cheapest product research you will run — a size chart that misleads, a delivery estimate that reads slower than it is, a photo that oversells a colour. What it deliberately will not do Worth knowing before you set expectations internally. It never issues a refund and never touches a payment gateway. It never cancels an order by itself. It creates no tracking numbers and generates no PDFs — it reads what your tracking and invoice plugins already store. And it does not replace your theme’s order pages unless you turn that on, which is not the recommended setting. That list is short on purpose, and it is the reason the rest can be trusted. Where to start Start with visibility, because it reduces email volume without requiring any new decisions from you: the order status timeline first, then self-service cancellations once you are comfortable with the request queue. Installation is a five-minute job, and branding your order emails is the twenty minutes that makes the whole thing look like it was always part of your store.