Skip to content

WooCommerce HPOS

WooCommerce originally stored every order as a WordPress post, in the same wp_posts and wp_postmeta tables that hold your pages, blog posts and menu items. HPOS, short for High-Performance Order Storage, moves orders into database tables of their own.

Wondering whether your shop uses it, and why it matters? This article explains the difference the storage method makes and where Core shows the current state.


Why the storage method matters

When orders live in the shared posts table, every order query has to work its way through a table that also holds all your other content, using a structure that was designed for posts rather than orders.

That is fine for a shop with a few hundred orders. It stops being fine as the order count grows: order lists in the admin take longer to load, order searches get slow, and the storefront pages that look up order data feel sluggish. The shop keeps working, it just gets slower the more successful it becomes.

With HPOS, orders sit in tables built for orders. The queries stay fast as the shop grows.

Where to find the state

There are two ways to navigate to the WooCommerce HPOS state of a site.

Directly

  1. Navigate to 'Advanced' > 'Virtual Hosts'.
  2. Select the virtual host.
  3. Navigate to 'WooCommerce HPOS'.

Via the project

  1. Navigate to 'Projects'.
  2. Select the project.
  3. Navigate to 'Advanced' on the environment you want.
  4. Under 'Virtual Host', click 'Manage'.
  5. Navigate to 'WooCommerce HPOS'.

What the page shows

Cyberfusion asks the site itself, and shows one of four states:

State Meaning
'Enabled' Orders are stored in their own tables. Nothing to do.
'Disabled' WooCommerce is running, but orders still go into the shared posts table.
'WooCommerce not activated' The WooCommerce plugin is installed but not activated, so there is no order storage to configure.
'WooCommerce not installed' This site does not run WooCommerce.

Switching it on

HPOS is a WooCommerce setting, so you change it in WooCommerce, not in Core. The 'Read the docs' button on the page opens WooCommerce's own documentation, which describes the switch and how existing orders are migrated to the new tables.

Do this on a moment you can check the shop afterwards, and make sure you have a backup first: the switch moves existing order data.

The matching health check

The 'WooCommerce HPOS enabled' health check flags shops that still have it off, per cluster, so you don't have to open each site to find them. See All about health checks.