HPOS and Block Checkout: What Store Owners Need to Care About?

WooCommerce rebuilt how orders are stored and reimagined checkout from scratch. Here's what you need to know about HPOS and Block Checkout.

HPOS and Block Checkout: What Store Owners Need to Care About?

Your store just hit 10,000 orders. Searching for one takes forever. Checkout feels sluggish. Sound familiar?


WooCommerce heard you. They rebuilt how orders are stored. They reimagined checkout from scratch.

But here’s the thing. These aren’t optional anymore.

HPOS is now the default. Block Checkout is the future. Plugins that don’t support them? They’re becoming dinosaurs.

Let’s break this down. No panic. Just preparation.

What is HPOS?#

HPOS stands for High-Performance Order Storage.

Think of it this way:

WordPress stores everything in two tables. Posts and postmeta. Your blog posts? In there. Your pages? Same place. Your WooCommerce orders? Also crammed in there.

Now imagine 50,000 orders competing with 1,000 blog posts. Every database query becomes a treasure hunt.

HPOS fixes this.

It gives orders their own dedicated tables:

Table NameWhat It Stores
wp_wc_ordersCore order data (status, total, customer ID).
wp_wc_order_addressesBilling & shipping addresses.
wp_wc_order_operational_dataOperational flags (stock reduced, email sent).
wp_wc_orders_metaCustom order metadata.

Four tables. Purpose-built. Properly indexed.

Result? Order queries that used to take 3 seconds now take 0.1 seconds.

What is Block Checkout?#

The classic checkout was built on PHP shortcodes. It worked. But customization required code or plugins.

Block Checkout is built on React and the WordPress Block Editor.

What this means for you:

  • Drag-and-drop checkout customization.
  • Faster page loads (JavaScript handles updates).
  • Better mobile experience.
  • Express payment buttons (Apple Pay, Google Pay) built-in.
  • Real-time shipping calculations.

The classic [woocommerce_checkout] shortcode still works. But new features? They’re going to Block Checkout first.


Why should you care?#

HPOS benefits#

  1. Speed: Stores with 100K+ orders see dramatic improvements.
  2. Scalability: Database doesn’t choke as you grow.
  3. Full-Text Search: Find orders by product name instantly.
  4. Better Caching: Orders cached separately from posts.
  5. Future Features: New WooCommerce features require HPOS.

Block Checkout benefits#

  1. Customization: Edit checkout like any WordPress page.
  2. Performance: Single-page app feel.
  3. Extensions: Payment gateways integrate via Store API.
  4. Accessibility: Built with a11y in mind.
  5. Local Pickup: Native support for store pickup.

The catch#

Plugin compatibility.

Your favorite plugin might not work with HPOS. Or Block Checkout. Or both. We tested CAPTCHA plugins specifically for Block Checkout and HPOS support in our WooCommerce CAPTCHA comparison, and the results varied more than you’d expect.

WooCommerce 10.x now checks this automatically. Incompatible plugins? You’ll see a warning before enabling HPOS.


HPOS deep dive: what actually changes#

The old way (posts storage)#

wp_posts
├── ID: 1234
├── post_type: 'shop_order'
├── post_status: 'wc-completed'
└── post_date: '2024-01-15'

wp_postmeta (hundreds of rows per order)
├── _billing_first_name: 'John'
├── _billing_last_name: 'Doe'
├── _billing_email: 'john@example.com'
├── _order_total: '99.99'
├── ... (50+ more meta fields)

Problem: One order = 1 post row + 50-100 meta rows. Queries join these tables constantly.

The new way (HPOS)#

wp_wc_orders
├── id: 1234
├── status: 'wc-completed'
├── total_amount: 99.99
├── customer_id: 456
├── billing_email: 'john@example.com'
└── date_created_gmt: '2024-01-15'

wp_wc_order_addresses
├── order_id: 1234
├── address_type: 'billing'
├── first_name: 'John'
└── last_name: 'Doe'

Result: Core data in columns, not rows. Proper indexes. Lightning queries.

HPOS performance features#

WooCommerce 10.x includes several performance optimizations:

FeatureWhat It Does
Full-Text SearchSearch orders by customer name, product, address.
Order CachingCache orders separately from WordPress object cache.
Optimized IndexesIndexes on status, date, customer_id, billing_email.
Sync ModeRun both systems in parallel during migration.

Block Checkout: what’s different#

Classic Checkout components#

  • PHP templates.
  • jQuery for validation.
  • Separate AJAX requests for each action.
  • Limited extensibility points.

Block Checkout components#

The new checkout is modular:

BlockPurpose
Contact InformationEmail and phone fields.
Shipping AddressAddress form with validation.
Billing AddressSeparate or same as shipping.
Shipping MethodsReal-time rate calculation.
Payment MethodsAll gateways in one block.
Express PaymentApple Pay, Google Pay buttons.
Order SummaryCart items, totals, coupons.
Order NoteCustomer notes.
Terms & ConditionsCheckbox with link.

Each block is customizable. Move them. Hide them. Style them.

Store API#

Block Checkout uses the Store API. This is WooCommerce’s REST API for cart and checkout.

Why does this matter?

  1. Headless Commerce: Build custom frontends.
  2. Mobile Apps: Same API, native apps.
  3. Performance: Efficient JSON responses.
  4. Security: Built-in rate limiting and validation.

Plugin compatibility: the truth#

How WooCommerce tracks compatibility#

Plugins can declare compatibility:

// Plugin declares HPOS compatibility
add_action( 'before_woocommerce_init', function() {
    if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
            'custom_order_tables',
            __FILE__,
            true  // true = compatible, false = incompatible
        );
    }
});

Compatibility states#

StateWhat It Means
CompatiblePlugin works with HPOS.
IncompatiblePlugin breaks with HPOS.
UncertainPlugin hasn’t declared (assumed incompatible).

Common plugins and their status#

Most major plugins now support HPOS:

Usually compatible:

  • WooCommerce Subscriptions.
  • WooCommerce Memberships.
  • WooCommerce Bookings.
  • Stripe, PayPal gateways.

Check first:

  • Order tracking plugins.
  • Custom order export tools.
  • Older PDF invoice plugins.
  • Legacy REST API integrations.

Known issues:

  • Plugins using direct wp_posts queries.
  • Plugins using WP_Query for orders.
  • Legacy REST API (before WC 3.0).

How to check your plugins#

  1. Go to WooCommerce → Settings → Advanced → Features.
  2. Look for the HPOS section.
  3. See the compatibility warnings.

Or use WP-CLI:

wp wc hpos status

How to migrate safely#

Step 1: Check compatibility#

Before anything else:

# List all plugins and their HPOS compatibility
wp plugin list --fields=name,status

Then check each plugin’s documentation.

Step 2: Enable sync mode first#

Don’t switch cold turkey. Use sync mode:

  1. Go to WooCommerce → Settings → Advanced → Features.
  2. Enable HPOS with sync enabled.
  3. Both databases stay updated.

This means:

  • Old plugins still work (reading from posts).
  • New queries use HPOS tables.
  • You can switch back if needed.

Step 3: Test thoroughly#

Critical tests:

  • Create a new order.
  • Edit an existing order.
  • Process a refund.
  • Search for orders by customer email.
  • Export orders to CSV.
  • Check all order-related plugins.
  • Verify webhooks fire correctly.

Step 4: Complete migration#

Once confident:

  1. Disable sync mode.
  2. Keep HPOS as primary.
  3. Optionally clean up legacy data.

Speed up your store even more#

HPOS helps, but it’s only one piece of the puzzle. We cover the full picture in our guide on why most WooCommerce stores feel slow, from cart fragments to autoloaded options. Here are a few more things you can do right now.

Index WP MySQL For Speed#

This plugin adds optimized indexes to WordPress tables.

What it does:

  • Adds high-performance indexes to wp_postmeta, wp_usermeta, etc.
  • Speeds up queries on large tables.
  • Includes WooCommerce-specific indexes for wp_wc_orders_meta.

Installation:

wp plugin install index-wp-mysql-for-speed --activate
wp index-mysql enable --all

Results: Some stores see 50%+ improvement in admin load times.

Get Index WP MySQL For Speed

Fast Woo Order Lookup#

A lightweight plugin for faster order searches.

What it does:

  • Caches order search results.
  • Optimizes “Orders” admin screen.
  • Reduces database load.

Get Fast Woo Order Lookup

Object caching#

Use Redis or Memcached for persistent object caching:

Popular options:

SolutionBest For
Redis Object CacheMost hosting providers.
MemcachedHigh-traffic sites.
SQLite Object CacheShared hosting without Redis.

Query Monitor#

Install Query Monitor to identify slow queries:

wp plugin install query-monitor --activate

Look for:

  • Queries taking >0.1 seconds.
  • Repeated queries (N+1 problem).
  • Queries without indexes.

Additional optimizations#

OptimizationImpact
Disable heartbeat on adminReduces AJAX calls.
Limit post revisionsSmaller database.
Clean up transientsFaster wp_options.
Use autoload:no for optionsFaster bootstrap.
CDN for static assetsFaster frontend.

Block Checkout: migration tips#

Check if you’re already using it#

// In your theme or plugin
if ( class_exists( 'Automattic\WooCommerce\Blocks\Package' ) ) {
    // Blocks available
}

Or check your checkout page. Does it have the Block Editor? You’re on Block Checkout.

Common issues and fixes#

Issue: Custom fields not showing

Block Checkout uses the checkout fields API:

add_action(
    'woocommerce_blocks_checkout_block_registration',
    function( $integration_registry ) {
        // Register your custom integration
    }
);

Issue: Payment gateway not appearing

The gateway must support the Store API:

// Gateway must implement
\Automattic\WooCommerce\Blocks\Payments\Integrations\AbstractPaymentMethodType

Issue: Checkout hooks not firing

Classic hooks like woocommerce_before_checkout_form don’t work. Use filters instead:

// Use the Block Checkout extensibility points
add_filter( 'woocommerce_blocks_checkout_...', 'your_function' );

Keeping Classic Checkout (for now)#

Not ready to switch? You can use the Classic Shortcode block:

  1. Edit your checkout page.
  2. Delete all blocks.
  3. Add “Classic Shortcode” block.
  4. Select “Checkout”.

This keeps the old PHP checkout running.


Preparation checklist#

Before enabling HPOS#

  • Backup your database.
  • List all installed plugins.
  • Check each plugin’s HPOS compatibility.
  • Test on staging first.
  • Enable sync mode (not direct switch).
  • Run order search tests.
  • Verify order editing works.
  • Check order exports.
  • Test refunds and cancellations.
  • Confirm webhooks function.

Before switching to Block Checkout#

  • Review current checkout customizations.
  • Check payment gateway compatibility.
  • Test all custom checkout fields.
  • Verify email notifications.
  • Test order confirmation page.
  • Check mobile responsiveness.
  • Confirm tracking pixels fire.
  • Test express payment options.

Frequently asked questions#

Is HPOS required now?#

For new stores, yes - it’s the default. Existing stores can still use posts storage, but it’s deprecated.

Will I lose order data?#

No. Migration copies data; it doesn’t delete. Sync mode keeps both databases updated.

Can I switch back to posts storage?#

Yes, if sync is enabled. Once you disable sync and clean up legacy data, switching back requires restoring from backup.

Do I need HPOS for Block Checkout?#

No. They’re independent features. But both together give the best performance.

What if a plugin isn’t compatible?#

  1. Check for plugin updates.
  2. Contact the developer.
  3. Use sync mode (both systems work).
  4. Consider alternatives.

How long does migration take?#

Depends on order count:

OrdersApproximate Time
1,000Minutes.
10,00010-30 minutes.
100,000Several hours.
1,000,000+Use WP-CLI, scheduled.
# For large stores
wp wc hpos sync --batch-size=500

Will Block Checkout affect my SEO?#

No negative impact. Same URL, same content. Actually better because of faster load times.

Can I customize Block Checkout’s appearance?#

Yes. Use CSS, theme.json, or the Site Editor. Blocks support standard WordPress styling.


Timeline: what’s coming#

WooCommerce 10.x (current)#

  • HPOS is default for new installs.
  • Block Checkout is default.
  • Sync mode available.

WooCommerce 11.x (expected 2026)#

  • Possible deprecation of posts storage.
  • More Block Checkout features.
  • Enhanced Store API.

Beyond#

  • Posts storage removal (announced with long runway).
  • Classic checkout maintenance mode.
  • Full transition to modern architecture.

Action items (do this today)#

  1. Check your WooCommerce version: Update to 10.x.
  2. Review plugin compatibility: Note any warnings.
  3. Set up staging site: Test changes safely.
  4. Enable HPOS with sync: Start the transition.
  5. Install performance plugins: Index WP MySQL, Object Cache.
  6. Test Block Checkout: On staging first.
  7. Update incompatible plugins: Or find alternatives.
  8. Monitor performance: Before and after metrics.

The bottom line#

HPOS and Block Checkout aren’t just updates. They’re WooCommerce’s future.

The good news? The transition is smooth if you prepare.

  • Start with sync mode.
  • Test everything on staging.
  • Update plugins proactively.
  • Monitor performance gains.

Your 10,000-order store? It’s about to feel like a fresh install.

Don’t panic. Prepare.


More WooCommerce guides:

All of our plugins — Bouncer — reCAPTCHA & Fraud Protection for WooCommerce, Evenzo – Events Manager for WooCommerce, and Raffle for WooCommerce — support both HPOS and Block Checkout from day one.

Have questions about HPOS or Block Checkout? Contact us or check out the WooCommerce documentation.

We didn't just write about it. We built something for each.