Skip to content
WooRescueHQ

Specialist service

WooCommerce HPOS support

High-Performance Order Storage moves orders out of the WordPress posts tables into dedicated order tables. Most problems come from code that still reads orders the old way. We audit, migrate, verify and fix — without risking order data.

What an HPOS engagement covers

  • Audit of custom code, the theme and extensions for direct order access
  • Compatibility status of every active extension
  • Rewriting incompatible code to the WooCommerce CRUD API (wc_get_orders(), $order->get_meta())
  • A migration plan using compatibility mode and synchronisation
  • Verification of order data before and after switching
  • A rollback path while synchronisation is still enabled

What you receive

  • An audit report: what will break and why, with file and line references
  • Fixed, HPOS-compatible code
  • A migrated store with verified order data
  • Documentation of what changed for future developers

How a safe HPOS migration works

  1. Audit. Search the theme, custom plugins and snippets for direct order access: get_post_meta() or update_post_meta() on order ids, WP_Query or get_posts() with shop_order, and SQL against wp_posts or wp_postmeta for orders.
  2. Fix the code so it uses the WooCommerce CRUD API, and declare HPOS compatibility in custom plugins.
  3. Enable compatibility mode so both storages are kept in sync, and let synchronisation finish.
  4. Verify that order data matches between storages, on staging first.
  5. Switch the authoritative storage to HPOS, keeping synchronisation on as a safety net.
  6. Disable synchronisation only after the store has run correctly for a while.
PHPcustom-plugin.php
// Before: breaks once HPOS is authoritative
$po = get_post_meta( $order_id, '_po_number', true );

// After: works with both storages
$order = wc_get_order( $order_id );
$po    = $order ? $order->get_meta( '_po_number' ) : '';

FAQ

Frequently asked questions

Is HPOS enabled by default?

For new stores, yes — it has been the default since WooCommerce 8.2. Existing stores keep the legacy posts storage until they migrate.

Can we switch back if something goes wrong?

While compatibility mode keeps both storages synchronised, switching the authoritative storage back is possible. That is why synchronisation stays on until the store has run correctly on HPOS for a while.

Our code uses get_post_meta() on orders. Will it break?

Once HPOS is the authoritative storage, yes — it reads the posts tables, which are no longer the source of truth. Use the order object instead: wc_get_order( $id )->get_meta( 'key' ).

$ describe the problem

Have a WooCommerce problem?Request a diagnosis.

Tell us what is failing, what changed recently and the business impact. We review every request and recommend the appropriate next step.

Request a diagnosis See services and prices

Never send passwords, API keys or card data through the form.

Diagnosis from€299

Request a diagnosis