Full Answer
Before HPOS, WooCommerce stored every order as a WordPress post of type shop_order, with order details — totals, line items, payment method, customer ID — saved as post meta rows. Tracking plugins could call get_post_meta on the order ID and retrieve whatever they needed. It worked, but it was slow: WordPress's wp_postmeta table isn't indexed for the kinds of queries WooCommerce needs at scale, and stores with tens of thousands of orders saw admin pages grind to a halt.
HPOS replaces that with purpose-built tables — wp_wc_orders, wp_wc_orders_meta, wp_wc_order_addresses — designed for order queries. The performance improvement is significant, but the migration changes the data access contract. Any code calling get_post_meta on an order ID now gets back empty results, not an error. The order exists; the function simply doesn't know where to find it. That silence is the problem — a tracking plugin reports zero revenue on a purchase event, and the store owner has no warning that anything broke.
The fix is straightforward: plugins must use WooCommerce's order object methods — $order->get_total(), $order->get_id(), $order->get_items() — instead of direct meta queries. Tools like Transmute Engine use the CRUD API for all order data access, so they work identically under both HPOS and legacy storage. Before updating WooCommerce or enabling HPOS, check that every tracking plugin in your stack explicitly declares HPOS compatibility. Related: How to audit your WooCommerce tracking stack.