This guide covers Dispatchable Order Tracking for WooCommerce, the free plugin, from start to finish: installing it, setting it up, every feature, and how to fix the problems merchants most often run into. It describes version 0.2.0.
What it does. “Where is my order?” is the question cash-on-delivery stores answer all day, often for orders that have no tracking number at all: your own drivers, a local courier, a courier that reports by phone. This plugin gives your customers a tracking page they can actually use, with their order number and phone number, and gives you one-click delivery steps to keep it up to date.
How it works: the customer looks it up, and you record what happened. The free plugin never sends a message by itself and never changes your order statuses. Delivery steps such as Out for delivery or Delivered are stored separately, so anything that runs on your order statuses (WooCommerce’s emails, other plugins) is untouched. It needs no courier account, API key or outside service, and everything stays in your own database.
1. Requirements
- WordPress 6.6 or newer
- WooCommerce 8.2 or newer, installed and active
- PHP 8.1 or newer
It works with:
- block themes and classic themes;
- the Checkout and Order Confirmation blocks, and the classic (shortcode) checkout;
- High-Performance Order Storage (HPOS) and the older posts storage;
- classic email templates and WooCommerce’s block email editor.
You don’t need to change anything about how your store is built.
2. Installing the plugin
- Make sure WooCommerce is installed and active.
- Go to Plugins → Add New Plugin, search for Dispatchable Order Tracking, click Install Now, then Activate.
On activation, the plugin:
- creates a page called Track your order at
/track-order/. This is where customers check their order. Leave it published. - adds an Order tracking tab to WooCommerce → Settings.
- adds an Order tracking item under the WooCommerce menu, with this month’s results, the activity log and the Status checks.
- adds an Order tracking box to every order’s edit screen.
On a fresh install, a “Dispatchable Order Tracking is active.” notice appears with a Set up order tracking button. It only appears on the Plugins screen and the plugin’s own screens, and goes away once you finish or skip the wizard, or click Dismiss.

If your site doesn’t meet the requirements, the plugin stays inactive and shows a notice on the Plugins screen listing exactly what’s missing. It won’t break your site.
3. The setup wizard
The wizard asks three short questions. Each one has a working default, so you can use Skip this step or Exit setup at any point: tracking already works with its defaults, even if you never open the wizard. You can run it again any time with the Run setup again link at the top of the settings tab, or on the Status tab.
- When you mark an order Completed, where is it?
- It has left my store (customers see “Shipped”), the default;
- The customer has it (customers see “Delivered”).
If you’re not sure, keep Shipped: telling a customer “Delivered” too early causes more questions than the other way round. If other plugins have added their own order statuses, they’re listed here too, with a stage suggested from each status’s name for you to check.
- How do you deliver? Add the couriers you use, one per line, optionally with the courier’s tracking link (see Settings). Own delivery (no tracking number) is always available, so leave this empty if you deliver yourself.
- Where should customers find their tracking link? In the order emails WooCommerce already sends the customer, on the order-received (thank-you) page, and in My Account with the order’s progress. All three are on by default. This step also shows the address of your tracking page.
Save & finish takes you to WooCommerce → Order tracking with a “You’re set up.” message and a See what your customer sees button. It opens the real tracking page of your latest order in a new tab, so the first thing you see is what your customer sees.

4. How tracking works: stages and delivery steps
Your customers never see your WooCommerce order status. They see a stage, which comes from two places.
The stages
- Main path, in order: Order received → Confirmed → Preparing → Shipped → Out for delivery → Delivered.
- Off the main path: On hold, Delivery failed, Returned, Cancelled, Refunded and Payment failed, shown only when they apply.
You can rename any stage and add a short message to it (see Settings). Confirmed is only shown if one of your order statuses is set to show it, so a store that doesn’t confirm orders never shows an empty “Confirmed” step.
1. Your order statuses
Each order status shows the customer one stage. The defaults:
- Pending payment → Order received
- On hold → On hold
- Processing → Preparing
- Completed → Shipped (or Delivered, if you chose that in the wizard)
- Cancelled → Cancelled, Refunded → Refunded, Failed → Payment failed
- Statuses added by other plugins → “Don’t show a change”, until you choose a stage for them
“Don’t show a change” keeps showing the customer the stage they saw before. Changing this map applies to every order, including existing ones, the next time a customer looks.
2. Delivery steps you record
Five stages are delivery steps you record yourself with one click: Shipped, Out for delivery, Delivered, Delivery failed and Returned. Each is saved with its time, who recorded it, and an optional note for the customer. Recording a step never changes the order status.
How the customer’s stage is chosen
- The customer sees the furthest point reached, from either the status or a delivery step. For example, an order in Processing (Preparing) that you mark Out for delivery shows Out for delivery.
- Cancelled, Refunded and Payment failed always win. If you cancel or refund an order, the customer sees that, whatever steps were recorded.
- A Delivery failed step followed by a new Out for delivery shows the retry honestly.
- Times are real: each step shows when it happened. A step the order reached without its own record (for example, Preparing on an order that went straight to Completed) is shown without a time rather than with an invented one.
- Orders placed before you installed the plugin show their current stage only, since their earlier history wasn’t recorded.
5. Settings
Go to WooCommerce → Settings → Order tracking. Click Save changes when you’re done.

What customers see for each order status
One dropdown per order status, including statuses added by other plugins, to choose the stage the customer sees (see How tracking works). For Completed, choose Shipped if it means the order has left your store, or Delivered if it means the customer has it.
Tracking link
- Show the link:
- In customer order emails (Processing, Completed, On hold, Customer note)
- On the order received (thank-you) page
- On My Account → View order, with the delivery progress
All three are on by default. The link is added to emails WooCommerce already sends: the plugin never sends an email of its own.
- Share message: the text used by the WhatsApp, SMS and Copy buttons on each order (up to 500 characters). Placeholders:
{customer_name},{order_number},{stage},{tracking_url},{courier},{tracking_number},{store_name}. Leave it empty to use the default:
Hi {customer_name}, your order #{order_number} is now: {stage}. Track it here: {tracking_url}
Delivery
- Couriers: one courier per line. To link customers to the courier’s own tracking page, add
|and the courier’s link with{tracking_number}where the number goes, for example:
Amana | https://example.com/track?n={tracking_number}
A courier without a link is fine too. Own delivery (no tracking number) is always available, and there’s no built-in carrier list to maintain. - Flag shipments after (days): the Orders list can show shipped orders with no later delivery step after this many days. Default 3, from 1 to 60.
Stage names and messages
For each stage, a name (up to 60 characters; leave it empty to use the default) and a message customers see with it (up to 300 characters), for example “Preparing: we pack orders within 24 hours” or “Out for delivery: our driver will call before arriving”. Both are plain text.
6. What your customers see
The private tracking link
Every order gets its own private link to the tracking page, so customers never have to type anything. It appears:
- In their order emails: a small Track your order box near the top of the Processing, Completed, On hold and Customer note emails, with the current stage (“Now: Shipped.”) and a See where your order is link. In plain-text emails, the link is shown as text. It never appears in admin emails sent to you.
- On the order-received page: a Track your order box, once, right after checkout.
- In My Account → View order: a Delivery section above the order details, with the full delivery progress and a Tracking link the customer can share or bookmark.

The link works while the order is open, and for 60 days after its last update once the order has ended (Completed, Cancelled, Refunded or Failed, or a Delivered or Returned step). After that the page says the link has expired and offers the lookup form instead. Opening the link only displays the order: it never changes anything, so email security scanners that open links are harmless.
The Track your order page
The page is styled by your theme and works on phones and in right-to-left languages. For an order, it shows:
- the order number and the date it was placed;
- the current stage with your message for it;
- the steps, each with its time and your note to the customer, and the steps still to come;
- the courier, the tracking number and a Track with {courier} link, when there is one;
- item names and quantities;
- the delivery city only.
It never shows the address, phone number or email, so a forwarded link reveals nothing private.

Looking up an order without the link
Opened without a link, the page shows a short form: Order number and Phone number or email, then Track my order. The result appears on the same page.
- The phone number can be typed however the customer likes:
0612…,+212 612…,00212…, with spaces or dashes, or in Arabic-Indic or Persian digits. The lookup compares the last digits of the number, and matches the order’s billing or shipping phone. - An email address (anything with “@”) is matched against the billing email, in any capitals.
- The order number is the one WooCommerce shows the customer, so sequential order-number plugins work. A “#” in front is fine.

Protection against people guessing other customers’ orders:
- Both the order number and the matching phone or email are needed.
- Every miss shows the same message: “We couldn’t find an order with those details.” It never says which half was wrong.
- A visitor gets 10 tries per 15 minutes.
- 5 wrong tries lock that order number’s lookup for 15 minutes. Its private link keeps working.
- A hidden field stops simple bots.
- The page tells page caches and search engines not to store it.
Adding the tracking page somewhere else
The page uses the Order tracking block. You can change the page’s title and add your own text around it. You can also use the [dispatchwp_order_tracking] shortcode, for example in a classic page builder. Use one tracking page: links in emails always point to the page the plugin created.
7. Recording delivery steps on the order screen
Every order’s edit screen has an Order tracking box in the sidebar. It shows:
- Customer sees: the stage, the steps with their times (or “(not yet)”), and the courier and tracking number;
- Open the customer’s tracking page, which opens the order’s private link in a new tab;
- New tracking link, which replaces the order’s link. The old link stops working straight away. Use it if a link was sent to the wrong person.
![]()
Record a delivery step
- Optionally type a Note for the customer (up to 200 characters). It’s shown on the tracking page with this step.
- For Mark shipped, choose the Courier (or Own delivery (no tracking number)) and, optionally, the Tracking number.
- Click the step: Mark shipped, Out for delivery or Delivered.
- If a delivery attempt failed, choose If delivery failed, why? (private): Customer not reachable, Customer not home, Wrong address, Customer asked to reschedule, or Other. Then click Delivery failed. The reason is for you only: the customer sees “Delivery failed” and your note, if you wrote one.
- If the parcel was refused or sent back, click Returned.
The notice confirms “Recorded: Out for delivery. The order status was not changed.” Nothing is sent to the customer. To tell them, use the share buttons in the same box (see Sharing the tracking link).
- Undo last step (…) removes the latest step from what the customer sees. It stays in the activity log as “undone”, so your history is complete.
- Delivery steps can’t be recorded on Cancelled, Refunded or Failed orders. Those orders show the box without the buttons.
- When the order’s status should change too, for example to Completed once delivered, change it as usual in WooCommerce. The plugin leaves that to you, so WooCommerce’s own emails and other plugins keep working exactly as they do today.
The buttons are available to Administrators and Shop Managers.
8. The Orders list: Delivery column, filters and bulk steps
- A Delivery column next to Status shows what each customer sees. A shipped order with no later step for longer than your Flag shipments after (days) setting also shows “No update since shipping”.
- A filter above the list (All delivery steps) shows only orders that are Out for delivery, have a Delivery failed step, or are Shipped, no update for 3 days (your setting). That’s what’s in the van, and what may need a follow-up.
- Three bulk actions: Delivery: Shipped, Delivery: Out for delivery and Delivery: Delivered. Select orders, choose one and click Apply. Up to 500 orders at a time.

Bulk steps never change order statuses and send nothing. Bulk Shipped keeps each order’s existing courier and tracking number. Cancelled, refunded and failed orders are skipped, and the result notice says how many. Delivery failed and Returned are one order at a time, from the order screen, because they usually need a reason or a note.
After a bulk step, the notice offers Share tracking links one by one (see below).
9. Sharing the tracking link by WhatsApp, SMS or Copy
The Share tracking link section of the Order tracking box shows your share message, already filled in for that order, and three buttons:
- WhatsApp: opens WhatsApp in a new tab with the customer’s number and the message. You press Send yourself. It uses WhatsApp’s standard click-to-chat link, so it needs no WhatsApp Business API and no other plugin.
- SMS: opens your device’s messaging app with the number and message filled in. Use it from wp-admin on a phone (or a computer paired with one). The message goes from your own phone plan. Tested on iPhone and Android.
- Copy message: copies the message, for any other channel you use.
You can edit the message in the box before you tap. To change it for every order, edit Share message in settings.

The customer’s number is turned into an international one using the order’s country calling code, or your store’s if the order has none. If the order has no usable phone number, the box says so and WhatsApp asks whom to send it to.
One by one, after a bulk step
Click Share tracking links one by one in the bulk result notice. You’ll see one order per card (Order 1 of 12) with the same buttons, and Previous, Next and Finish. Nothing is sent in the background: every message is one you open and send.

Each tap is counted in the activity log as “WhatsApp share tapped”, “SMS share tapped” or “Share message copied”. That records that someone tapped the button, not that the message was delivered.
10. Results and the activity log
Go to WooCommerce → Order tracking. The page has three tabs: Results and activity, Status and Settings.
This month’s results
The top of the page shows This month or Last month (months follow your site’s timezone):
- “Customers checked their order themselves N times”: each one is a “where is my order?” message nobody had to answer. It’s split into lookups with the form and opens of the tracking link. A link open counts at most once per order per day, and your team’s own views aren’t counted. Some email security scanners open links too, so a few opens may not be people.
- Delivery steps recorded, per step.
- Tracking links shared by hand: WhatsApp, SMS and Copied.
- Lookups that found no order, and lookups blocked after too many tries.
![]()
The activity log
Below the results, a read-only log of everything that happened, newest first, 20 per page. Columns: Date, Order, What happened, Who (a team member, the customer, or “Automatic (WooCommerce)” for status changes) and Details (your note, or the private failure reason).
Search by order number, and filter by type: Delivery steps, Order status changes, Lookups, Tracking link opens, Shared by hand.
![]()
Lookups are counted, but nothing the visitor typed is stored. Lookups, link opens and share taps are deleted automatically after 12 months. Status changes and delivery steps stay as the order’s history.
11. The Status tab
The Status tab on WooCommerce → Order tracking checks everything tracking depends on. It doesn’t change any setting. Each row is marked OK, Check, Problem or Info:
- WordPress, WooCommerce and PHP versions;
- order storage (HPOS or posts) and email editor (block or classic);
- the Tracking page: published, and still containing the Order tracking block or shortcode;
- Page cache: whether a page-cache plugin is active, and which page to exclude (see Troubleshooting);
- the activity table;
- WooCommerce fulfillments, on or off (see Working with other plugins);
- where the tracking link is shown;
- the last customer check (a link open or a lookup);
- orders Out for delivery for more than 2 days, with a Show Out for delivery orders link. Usually a later step (Delivered, Delivery failed or Returned) wasn’t recorded.

The same checks appear in WooCommerce → Status → System status under Order tracking, so they’re included when you copy your system report for support.
12. Working with other plugins
- Plugins that run on order statuses (emails, fulfilment, messaging): unaffected. Delivery steps are not status changes, so recording one never triggers them.
- Custom order statuses from other plugins (for example a “Delivered” status from a shipment-tracking plugin) are listed in settings and in the wizard. Choose the stage each one shows.
- WooCommerce Order Fulfillments: when this WooCommerce feature is switched on, a fulfillment marked fulfilled shows the customer Shipped, with its carrier, tracking number and link, read from WooCommerce. An order with several fulfillments shows each one. The courier and tracking-number fields in the Order tracking box are then replaced by a note to use WooCommerce’s Fulfillments box, so there’s one place to type a tracking number. The other delivery steps work as usual. With the feature off, which is WooCommerce’s default, the plugin uses its own fields.
- Dispatchable Order Messaging (free): its
{tracking_number}placeholder is filled with the order’s tracking number, but only when nothing else has filled it. - Other tracking plugins and custom code can supply the courier and tracking number through the
dispatchwp_track_shipmentfilter. Developers can also use thedispatchwp_track_milestone_recordedaction, which runs whenever a delivery step is recorded. Thedispatchwp_track_progress_htmlfilter (from version 0.2.0) adds your own line, for example a delivery window or a holiday notice, under the delivery progress on the tracking page and in My Account. Whatever it returns goes through the plugin’s HTML allow-list, so scripts and unknown tags are removed.
13. Privacy and your data
- No outside service, account or API key. Nothing is sent from your site.
- What’s stored:
- with each order: its delivery steps and your notes to the customer, the courier and tracking number, and the private link’s secret;
- in one table of its own: status changes, delivery steps, and counts of lookups, link opens and share taps. It holds nothing a visitor typed;
- to stop repeated guessing, a scrambled form of the visitor’s IP address for 15 minutes. The IP address can’t be read from it.
- Lookup, link-open and share counts are deleted after 12 months. When an order is deleted, all of its tracking records go with it.
- WordPress’s privacy tools (Tools → Export Personal Data / Erase Personal Data) include this plugin’s data, looked up by the order’s email.
- An export includes the stage shown, the delivery steps with times and notes, the courier, the tracking number, and whether a private link exists.
- An erase removes your notes, the tracking number and the private link (old links stop working). It keeps the delivery steps, without notes, as your store’s records, and reports them as kept.
- The plugin suggests wording for your privacy policy under Settings → Privacy → Policy Guide.
14. Deactivating or deleting the plugin
- Deactivating removes the tracking box from emails, the thank-you page and My Account, the Order tracking box and the Orders-list column straight away. Your order statuses are exactly as you left them, since the plugin never changed them. Its data is kept for if you reactivate.
- Tracking links already sent will open an empty Track your order page. Move the page to Draft if you deactivate for good.
- Deleting the plugin from the Plugins screen removes all of its data:
- its settings;
- its activity table;
- its data on every order (delivery steps, notes, couriers, tracking numbers, link secrets);
- the Track your order page.
Your orders themselves are left untouched.
15. Troubleshooting
Start with the Status tab on WooCommerce → Order tracking. Most setup problems show up there.
The customer sees the wrong stage
- Check what the order’s status is set to show in WooCommerce → Settings → Order tracking. A common case: Completed shows “Shipped” but your store completes orders on delivery. Change Completed to Delivered.
- A status set to “Don’t show a change” keeps showing the previous stage. That’s intended.
- Cancelled, Refunded and Payment failed always win over delivery steps.
- A delivery step recorded by mistake can be removed with Undo last step.
- The Customer sees line in the Order tracking box shows exactly what the customer sees.
The customer can’t find their order with the lookup form
- They need the order number as it appears in their emails, and the phone number or email used at checkout. Any spacing or format works for the phone number, but it has to be the same number.
- After 5 wrong tries, that order number’s lookup is locked for 15 minutes, and a visitor is limited to 10 tries per 15 minutes. Ask them to wait, or send them the private link with the share buttons.
- Customers on mobile data sometimes share one internet address with many others, so the visitor limit can very occasionally be reached by someone else’s tries. Waiting 15 minutes or using the link always works.
The tracking link isn’t in the customer’s email
- The box is only added to the customer’s Processing, Completed, On hold and Customer note emails, never to admin emails.
- Check that Show the link → In customer order emails is ticked in settings.
- Check the Tracking page row on the Status tab. While the page is missing, no links are shown.
- If emails don’t arrive at all, that’s an email delivery issue on your site, not this plugin. An SMTP plugin usually fixes it.
The customer says the link doesn’t work
- Links expire 60 days after the order’s last update once the order has ended. The page then offers the lookup form.
- If you clicked New tracking link on the order, older links stop working. Share the new one.
- Erasing the customer’s personal data also removes the link.
I use a page-cache plugin
The tracking page tells caches not to store it, and most respect that. To be sure, add the page (/track-order/) to your cache plugin’s list of pages or URLs never to cache. The Status tab names the cache plugins it finds. If a customer ever sees an out-of-date stage, this is the first thing to check.
I deleted or edited the Track your order page
- If it’s missing or unpublished, it’s re-created automatically the next time you load any admin page.
- If it still exists but no longer contains the Order tracking block or the
[dispatchwp_order_tracking]shortcode, customers see an empty page. Add one back, or move the page to the Trash so it’s re-created.
The delivery-step buttons don’t appear on an order
They don’t show on Cancelled, Refunded or Failed orders, and only Administrators and Shop Managers see them. The box still shows what the customer sees.
The courier and tracking number fields are gone
WooCommerce’s Order Fulfillments feature is switched on on your store. Add the carrier and tracking number in WooCommerce’s Fulfillments box on the order instead. The Status tab’s WooCommerce fulfillments row confirms it.
The SMS button doesn’t open anything
SMS links open your device’s messaging app, so they work from wp-admin on a phone, or on a computer paired with a phone. On a computer without that, use WhatsApp or Copy message.
The WhatsApp button opens the wrong number, or no number
- The number is built from the order’s phone and its country’s calling code (or your store’s country, if the order has none). If the result is wrong, fix the order’s phone, ideally with
+and the country code, and try again. - If the order has no usable number, WhatsApp opens and asks whom to send the message to.
16. FAQ
Does it need a courier account, an API key or a subscription?
No. Customers look up their order on your own site, and you record delivery steps with one click. Nothing connects to a courier or tracking service.
Does it send emails or WhatsApp messages?
No. It adds a tracking link to the emails WooCommerce already sends, and gives you WhatsApp, SMS and Copy buttons that open a ready message for you to send yourself.
Will it change my order statuses or trigger other plugins?
No. Delivery steps are stored separately. Your order statuses, and anything that runs on them, are untouched.
My orders don’t have tracking numbers. Is it still useful?
Yes, that’s what it’s built for. Choose Own delivery (no tracking number) and record Shipped, Out for delivery and Delivered with one click. Customers still see where their order is.
Can someone look up other people’s orders?
Both the order number and the matching phone number or email are needed, every miss shows the same message, and repeated guessing is blocked. The page never shows the address, phone or email.
Can several team members record delivery steps?
Yes. Everyone who can manage WooCommerce (Administrators and Shop Managers) can, and the activity log records who did what.
Can it send delivery updates to customers automatically?
Not the free plugin, deliberately: you always press Send yourself. Dispatchable Order Tracking Pro sends updates automatically by email and, with Dispatchable Order Messaging Pro, by WhatsApp, imports your courier’s spreadsheet, and shows delivery estimates.
Still stuck?
Free plugin question? Ask on the WordPress.org support forum or email support@dispatchwp.com. Include the checks from the Status tab. Pro or account question? Reach support from your account. Anything else, get in touch.