If you run a WooCommerce store, or build them for clients like I do, you’ve probably heard about HPOS. It stands for High-Performance Order Storage, and it changes the way WooCommerce stores order data. Instead of saving orders as posts in wp_posts and wp_postmeta, WooCommerce now stores them in dedicated tables designed for performance.

This is a big structural improvement, but switching to HPOS isn’t a simple toggle. It should be treated like a serious infrastructure update. Here’s what HPOS is, why I recommend it, and how I handle the migration process step by step, based on real client migrations and WooCommerce’s official documentation.


What is HPOS?

HPOS moves WooCommerce order data out of the general WordPress posts system and into its own custom tables, including:

  • _wc_orders
  • _wc_order_addresses
  • _wc_order_operational_data
  • _wc_orders_meta

This separation improves query performance, reduces overhead, and provides a more scalable structure for growing stores. Since WooCommerce 8.2, HPOS is stable and enabled by default on new installations.

If your store was built before then, you need to enable it manually, and do it right.


Why Migrate?

I’ve led multiple HPOS migrations for real-world WooCommerce stores, each with its own unique setup and challenges. The benefits are clear:

  • Faster backend performance
  • More reliable checkout and order updates
  • Cleaner database separation
  • Future-proofed for upcoming WooCommerce releases

But I’ve also seen what happens when people flip the switch too soon. It’s critical to plan ahead and test everything.


Check for Compatibility First

Before I even think about enabling HPOS, I start by checking for compatibility issues. This is critical. I’ve seen migrations break because a plugin or bit of custom code wasn’t ready for the new data structure.

WooCommerce will block HPOS if known incompatible plugins are active. To go a step further, here is a free plugin you can use to scan your site: HPOS Compatibility Scanner. It checks your active plugins and themes for compatibility flags and searches for code patterns that may indicate potential issues.

If you’re running a high-traffic store or rely on custom code, it’s worth running this scan first on a staging environment. The goal is to catch anything that might behave incorrectly once HPOS is active, especially plugins or custom code that access wp_posts or wp_postmeta directly. Instead, make sure your code uses wc_get_orders() and other WooCommerce CRUD methods.

If you find incompatible plugins, check with the vendor for an update or consider replacing them. I don’t recommend starting a migration until everything is confirmed compatible.


My Migration Process

This is the exact plan I followed during a 2-hour production migration window for a high-volume store. I’ve adjusted some steps here to make it more generally applicable:

1. Schedule and Communicate

  • Schedule the migration during a low-traffic time
  • Let team members know the plan and confirm who will be available

2. Prepare the Site and Take Backups

  • Enable WooCommerce Coming Soon Mode to block frontend traffic
  • Log into the host (e.g. SiteGround)
  • Go to Security > Backups and create a manual backup. I name it something like ‘Pre HPOS Migration.’

3. Enable Compatibility Mode

  • Go to /wp-admin/admin.php?page=wc-settings&tab=advanced&section=features
  • Enable the ‘Compatibility mode’ checkbox for HPOS. This starts syncing order data between the old and new systems without switching completely

4. Test Checkout and Order Creation

  • Place a test order using a manual gateway like Check Payments
  • Delete the order after confirming it’s processed correctly

5. SSH and Run Sync Commands

  • SSH into the server
  • Navigate to your WordPress root directory:
cd /path/to/your/site/public_html
  • Run the sync command:
wp wc hpos sync
  • Place another test order and confirm it syncs
  • If needed, verify or force re-migration:
wp wc hpos verify_data --re-migrate

6. Switch to HPOS Storage

  • Once all orders are synced and you’ve verified the data, go back to the same settings page
  • Change the selected storage method to ‘High-Performance Order Storage’
  • Leave compatibility mode on so both data structures continue to receive updates

7. Final Checkout Test and Backup

  • Place another real or test order
  • Check for any issues with webhooks, payment confirmations, or admin emails
  • Take a second backup: ‘Post HPOS Migration’

8. Go Live

  • Disable Coming Soon Mode
  • Let the team know HPOS is now active
  • Monitor the store throughout the day for any order issues

9. Optional: Disable Compatibility Mode Later

Once you’ve confirmed that everything works fine for a few days, or weeks, go back to the HPOS settings and disable compatibility mode. This stops WooCommerce from writing to the legacy wp_posts tables.

If you’re absolutely confident, you can also clean up legacy data with:

wp wc hpos cleanup all

But only do this after you’ve fully committed and backed up.


Final Thoughts

HPOS is a big win for WooCommerce performance, but the migration needs to be handled carefully. Test it on staging, use compatibility mode, and back everything up. Don’t skip steps just because it seems like a minor checkbox.

If you need help assessing plugin compatibility or running the migration, feel free to reach out. I’ve handled HPOS transitions for stores doing thousands of orders per month. A smooth transition is possible, it just takes planning.


Useful Links


Dustin Parker

Dustin Parker is a web developer who helps businesses build and improve their online stores with WordPress and WooCommerce. He specializes in creating custom plugins, themes, and integrations that solve real-world problems, whether that means streamlining workflows, connecting with third-party systems, or adding unique store features. Dustin's goal is always to deliver solutions that are reliable, easy to use, and built around each client's needs.