Skip to main content

ArtinTech Solution

Custom Order Statuses That Keep Your Reports Honest

WooCommerce ships with statuses that describe a warehouse: processing, completed, on hold. A shop that confirms every order by phone, packs it, hands it to a courier and then waits for cash on delivery needs a different vocabulary — confirmed, packed, dispatched, delivered, returned.

Adding those statuses is a well-documented ten minutes of work. Making the rest of WooCommerce agree that they exist is the other ninety percent.

Three flags decide whether a status is real

A newly registered status appears in the dropdown and does nothing else. WooCommerce still has to be told, separately, how to treat it:

  • Counts as paid. Without this, a status that follows payment is not treated as a paid state, and the behaviour that depends on payment does not follow the order.
  • Included in reports. Without this, revenue sitting in a custom status is invisible to analytics. A shop whose orders mostly live in dispatched sees a sales report reading close to zero.
  • Available in bulk actions. Without this, moving forty orders forward at the end of a packing day is forty individual edits.

We made each of those a per-status setting rather than something decided in code, because only the shop owner knows whether dispatched should count as revenue yet. That question is about their accounting, not about our implementation.

Remember that there are now two orders tables

With High-Performance Order Storage enabled, registering a status the traditional way is no longer sufficient — it must also be declared through the HPOS status filter, and the orders-list bulk-action hooks exist under two different names depending on which storage the store is using. Code that registers for only one of them works perfectly on the developer’s machine and silently offers nothing on the client’s.

Key takeaways

  • Registering a status is step one of four; paid, reports and bulk are separate opt-ins.
  • A missing reports flag does not throw an error, it just quietly understates revenue.
  • Let the shop owner decide which statuses count as paid — that is an accounting decision.
  • Register and hook for both HPOS and the legacy orders table, or the feature disappears on one of them.

Related reading: an internal order fulfilment tracker, live status editing in the order preview.

Running into a similar limitation in your own WooCommerce or WordPress store? Let’s Talk — ArtinTech Solution builds exactly this kind of custom store tooling.

Share this article

Leave a Reply

Your email address will not be published. Required fields are marked *