Skip to content
DevMarket
Odoo ModulesWordPress PluginsWordPress ThemesShopify ThemesApp TemplatesScripts & UtilitiesBlogSell on DevMarket
WordPress and WooCommerce

WooCommerce HPOS Explained: High-Performance Order Storage for Store Owners

WooCommerce HPOS keeps orders in dedicated tables instead of WordPress posts. Learn what changes, where the setting is, what compatibility mode does, and how to switch an existing store safely.

By DevMarket EditorialPublished: 9 min read
WooCommerce HPOS Explained: High-Performance Order Storage for Store Owners
On this page

WooCommerce HPOS, short for High-Performance Order Storage, is the way WooCommerce keeps orders in dedicated database tables instead of the general WordPress posts tables. It used to be called custom order tables. As of October 2026 it is on by default for new installations, a change that arrived in WooCommerce 8.2 in October 2023, while an existing store keeps its old storage until you switch it under WooCommerce > Settings > Advanced > Features. This guide explains what changes, what compatibility mode is for, and how to switch without putting orders at risk.

In short

  • HPOS stores orders in four dedicated tables instead of the posts and postmeta tables. WooCommerce names three benefits: scalability, reliability and simplicity.
  • New installations get HPOS by default from WooCommerce 8.2. Existing stores are not switched automatically, and you can switch back.
  • The setting is Order data storage under WooCommerce > Settings > Advanced > Features. Compatibility mode keeps the old and new tables in sync while you test.
  • Before switching, take a backup, test on a staging copy and check which plugins are flagged as incompatible.
  • Plugin authors declare HPOS support in code, and the official recipe book explains how.

What is WooCommerce HPOS, and what changes?

Until HPOS, WooCommerce stored orders and refunds as custom post types and post meta records, in the same tables WordPress uses for its posts. WooCommerce's HPOS documentation says this came with performance issues. HPOS moves the data into four tables designed for WooCommerce queries: _wc_orders, _wc_order_addresses, _wc_order_operational_data and _wc_orders_meta, each with your database prefix in front.

The orders themselves do not change: the same customers, items, totals and order IDs, still managed under WooCommerce > Orders. What changes is underneath. Plugins and custom code should get order data through WooCommerce's order API instead of reading the posts tables directly, and plugins that still do the latter cause most HPOS problems.

Three cards joined by arrows from left to right, the last one marked with a green tick
Switch in stages: prepare and test on a copy, synchronise with compatibility mode, then switch and watch the first orders.

Why is HPOS the default, and what are the benefits?

WooCommerce released HPOS as stable in version 8.2 and made it the default for new installations. The documentation describes three benefits:

  • Scalability: dedicated tables and indexes mean fewer read and write operations and fewer busy tables as orders grow.
  • Reliability: targeted backup and restore of order data is easier, and read/write locks help prevent race conditions.
  • Simplicity: order data sits in separate, easier-to-read tables, which makes plugins simpler to build.

The merchant documentation adds that businesses of all sizes benefit and that there are no special hosting limits. It gives no speed figure for your store, so measure before and after, as the speed guide describes.

Two details about "default". An existing store is never migrated automatically: the feature is opt-in, and you can stay on legacy storage. And WooCommerce's installer code (not the documentation) enables HPOS for a new store only when it has no orders yet and no active WooCommerce plugin that is incompatible or has not declared support, so check the Features screen instead of assuming. WooCommerce's developer blog says it recommends moving to HPOS.

Where do you find the HPOS setting, and what is compatibility mode?

Open WooCommerce > Settings > Advanced > Features. The labels below come from WooCommerce's documentation and plugin code, checked in October 2026, and the wording can differ slightly between versions.

  • Order data storage: choose "WordPress posts storage (legacy)" or "High-performance order storage (recommended)".
  • Enable compatibility mode: a checkbox that synchronises orders between the two storages.

Compatibility mode exists because many plugins still read the old tables. WooCommerce treats one set of tables as authoritative, the working copy, and the other as a backup that receives the changes. With HPOS authoritative and compatibility mode on, each change is also copied to the posts tables, so older plugins find current data there and you can switch back. The developer blog explains the design. Three rules follow:

  • You cannot switch storage while orders wait to be synchronised. WooCommerce disables the choice until the sync finishes.
  • The posts copy is meant to be read-only. Since WooCommerce 10.7 (April 2026), "sync on read" is off by default, so code that writes order data straight into the posts tables no longer has those changes pulled back into HPOS orders, as the advisory explains.
  • Compatibility mode is a transition aid. WooCommerce advises keeping it on for some time after the switch, and says that once a store has run without issues you can consider turning it off.

How do you check which plugins are compatible?

Use the Features and Plugins screens

Each plugin's author declares HPOS compatibility in code. WooCommerce can only show what plugins declare, and only for plugins whose main file has a WC tested up to header. Where to look:

  • Features screen: if an active plugin is incompatible, WooCommerce disables the HPOS option and names the plugin, with a View and manage link.
  • Plugins screen: that link opens a filtered list. You can also open /wp-admin/plugins.php?plugin_status=incompatible_with_feature&feature_id=custom_order_tables on your own site.
  • Everything else: no warning is not proof. Search the plugin's changelog and documentation for "HPOS" or "High-Performance Order Storage", then test on staging. On DevMarket, for example, the listing for Buy Now Button for WooCommerce, which sends customers from a product straight to checkout, states that it is compatible with HPOS and the Checkout block. That is the kind of statement to look for.

Stores in Saudi Arabia and the Gulf often rely on local payment, courier and e-invoicing plugins, so check those first: see payment gateways in Saudi Arabia and ZATCA e-invoicing.

If a plugin is not compatible

  1. Ask the author. WooCommerce says adding HPOS support is up to each developer, and asks merchants to contact them. Mention your WooCommerce version and the warning shown, and check for an update.
  2. Find an alternative if the plugin looks abandoned. The best WooCommerce plugins guide lists what to check: last update, tested versions and support.
  3. Wait on legacy storage. WooCommerce says an extension you already have installed keeps working without HPOS. Do not try to force the switch around the warning.

For plugin authors

If your plugin touches orders, use WooCommerce's order API, such as wc_get_order(), instead of post and postmeta functions, and declare compatibility only after testing both storages. The official HPOS recipe book covers audits, order queries and the declaration, and the snippet itself is in how to sell a WordPress plugin.

How do you switch an existing store to HPOS?

Before you start

  • Back up the database and the files, keep a copy off the server and test a restore: see how to back up WordPress.
  • Use a staging copy, following how to update WordPress and WooCommerce safely, with the latest plugin versions, as WooCommerce's large-store guide advises.
  • List what reads orders: reports, exports, shipping, invoices and accounting. The same guide warns that data warehouses, tracking and accounting systems must not read the posts tables directly.
  • Keep active any extension that stores data as custom post types, such as subscriptions or bookings. The merchant documentation says deactivating them during the migration can cause data mismatches.

The steps

  1. On staging, open Features and tick Enable compatibility mode. WooCommerce schedules background actions that copy orders 25 at a time, and you can follow them under WooCommerce > Status > Scheduled Actions.
  2. When the sync has finished, choose High-performance order storage (recommended), keep compatibility mode on and save.
  3. Test: place orders with each payment method, refund one, edit an order, and check emails, invoices, shipping, reports, exports and connected systems.
  4. Repeat on the live store after a fresh backup, in a quiet hour, and stay available. The large-store guide calls the switch, and the return to posts storage, hot migrations with no planned downtime.
  5. Watch the first real orders. Keep compatibility mode on for a while, then consider turning it off.
  6. To go back, make sure compatibility mode is on, wait for the sync, choose "WordPress posts storage (legacy)" and save.

Large stores should use WooCommerce's phased plan and its command-line tools, which sync many orders faster.

Common HPOS problems

ProblemLikely causeWhat to do
The HPOS option is greyed outAn active plugin is flagged incompatible, or orders are waiting to syncOpen View and manage, or wait for the sync
The sync seems stuckScheduled actions are not runningCheck Scheduled Actions, and ask your host about a server-side cron task
A report or plugin shows old or missing ordersIt reads the posts tables directlyAsk the author for an HPOS-compatible version
Subscriptions or bookings look wrongThe extension was deactivated during the migrationSwitch back to posts storage, let the sync finish, then switch again, as the merchant documentation says
An old integration failsIt uses the Legacy REST API, removed from core in WooCommerce 9.0 and not compatible with HPOSAsk the provider to move to the current REST API

Frequently asked questions

Do I have to enable HPOS?

No. For existing stores it is opt-in and you can switch at any time, though WooCommerce recommends it.

Will HPOS make my store faster?

WooCommerce documents scalability as a design goal but publishes no figure for your store, so measure your own order screens and checkout before and after.

Can I go back if something goes wrong?

Yes. While compatibility mode is on, WooCommerce says reverting to the posts tables can be done instantly. Take a backup anyway.

Does HPOS change my order numbers or lose data?

No. Order IDs are kept identical in both sets of tables so that synchronisation can work, and no data is meant to be lost. A tested backup is still your safety net.

Next steps

Check the Features and Plugins screens to see where you stand, then read how to update WordPress and WooCommerce safely for the staging routine. If a plugin needs replacing, browse WooCommerce plugins on DevMarket and check each listing's compatibility notes.

Items mentioned in this article

The software this guide talks about, ready to look at.

  • PluginNew

    Quick Buy Now Button for WooCommerce – Skip Cart

    Add a lightweight Buy Now button to WooCommerce products: skip the cart and send customers straight to checkout in one click.

    by TAQNIX
    No reviews yet
    Sales:0$19.00

Find the right software for the job

Every item on DevMarket has a human-reviewed release, an instant licence key and clear update and support terms.