# Enabling high-performance order storage (HPOS) on WooCommerce

> Since WooCommerce 8.2, released in October 2023, high-performance order storage (HPOS, also known as Custom Order Tables) is out of beta and declared stable. Shops created from 10 October 2023 onwards have it enabled by default; older shops need to enable it deliberately.

- Source canonique : [https://allaux.fr/en/wordpress-woocommerce/migration/stockage-haute-performance-commandes](https://allaux.fr/en/wordpress-woocommerce/migration/stockage-haute-performance-commandes)
- Langue : EN
- Dernière mise à jour : 2026-09-30

## Direct answer

> Go to WooCommerce, Settings, Advanced, Features: turn on synchronisation between the two storage modes first and let it finish before making the high-performance tables authoritative. Orders then move out of wp_posts and wp_postmeta into wp_wc_orders and its companion tables. That same screen lists the plugins that have not declared compatibility: deal with them before you switch.

## What HPOS changes in order storage

Before HPOS, WooCommerce stored each order as a post in the wp_posts table (with a shop_order content type), with all its data (customer, amounts, status, address) as metadata scattered across wp_postmeta, a generic table shared with every other content type on the site. With HPOS, orders are stored in dedicated tables, structured specifically for order queries: searching, filtering by status, reporting.

It’s enabled under WooCommerce > Settings > Advanced > Features, on existing shops that don’t have it on by default. A sync mode keeps both structures aligned during the transition, which allows rolling back if a problem shows up.

## Why an extension can stop working with HPOS

- A payment, accounting or reporting extension that reads or writes directly to wp_posts or wp_postmeta instead of going through the WooCommerce CRUD API (get_post_meta(), WC_Order, and so on) keeps looking for data in the wrong place once HPOS is active: missing orders in reports, status not updated, incomplete accounting exports.
- A theme or an in-house module that queries the database directly with SQL against wp_posts filtered on post_type = 'shop_order' no longer finds orders created after HPOS is enabled.
- Some extensions explicitly declare HPOS compatibility in their plugin header; WooCommerce shows this in the plugin list (compatible, not compatible, or not declared), which lets you check before enabling rather than after an incident.

## How I enable HPOS on an existing shop

1. **Checking extension compatibility** — I check the HPOS compatibility status WooCommerce shows for each active order-related extension (payment, invoicing, shipping, reporting), and update the ones that aren’t compatible yet.
2. **Enabling sync mode** — I enable HPOS with sync kept on: orders are written to the new tables and stay replicated in wp_posts, which leaves a way out if an extension misbehaves.
3. **Testing on a sample of orders** — I check order creation, status changes, refunds and exports for each active payment channel, on a test environment first.
4. **An observation period with sync active** — I keep the shop running with sync active long enough to cover a full order cycle, watching reports and sensitive extensions.
5. **Turning off the old storage** — Once stability is confirmed, I turn off sync and the old wp_posts storage. This is the point of no return: turning it off before being certain no extension still depends on wp_posts for orders risks a silent loss of compatibility.

## Back up before enabling

> I back up the database before enabling HPOS, even though sync offers protection during the transition: it doesn’t replace a full backup in case something goes wrong on the hosting itself.

## Going further

- **Moving to WooCommerce cart and checkout blocks** — Another change from the same period of WooCommerce, with its own compatibility logic on the extensions side. ([/wordpress-woocommerce/migration/blocs-panier-commande](/wordpress-woocommerce/migration/blocs-panier-commande))
- **Updating WooCommerce to a major version** — HPOS is one of the changes to anticipate before a major WooCommerce version upgrade. ([/wordpress-woocommerce/mise-a-jour/version-majeure-woocommerce](/wordpress-woocommerce/mise-a-jour/version-majeure-woocommerce))
- **Checking extension compatibility before an update** — The general method for checking whether a plugin will survive a structural change like HPOS. ([/wordpress-woocommerce/mise-a-jour/verifier-extensions-avant-mise-a-jour](/wordpress-woocommerce/mise-a-jour/verifier-extensions-avant-mise-a-jour))
- **Backing up your shop before an intervention** — A backup comes before enabling HPOS, as with any intervention on the database structure. ([/guides/sauvegarder-boutique-avant-intervention](/guides/sauvegarder-boutique-avant-intervention))

## FAQ

### Will HPOS change my existing orders?

No, enabling it with sync copies existing orders into the new tables without altering them. Order history stays intact and browsable as normal.

### Can I roll back after enabling HPOS?

Yes, as long as sync and the old wp_posts storage haven’t been switched off. That’s exactly the point of keeping sync active for a while before cutting over the old system.

### How do I know if my payment extensions are compatible?

WooCommerce shows the HPOS compatibility status each extension declares in the active plugin list. I check this before enabling anything in production.

### Is HPOS mandatory?

It’s on by default for shops created from 10 October 2023 onwards. On an older shop, enabling it stays optional, but it brings a real performance gain on order queries as the order catalogue grows.

### How long should sync stay active before turning off the old storage?

Long enough to cover an order cycle representative of the shop’s activity, including the less-used extensions (refunds, month-end accounting exports) to make sure they still work correctly.
