Skip to content
**Fixes the silent-install bug + adds a hard data-safety guarantee.**

WooCommerce 8.2+ defaults to High-Performance Order Storage, putting orders in \`wp_wc_orders\` instead of \`wp_posts\`. Pre-2.4.0 read only the legacy table and silently saw zero orders on HPOS installs. v2.4.0 detects HPOS, declares compatibility, and queries whichever store is active.

The plugin **no longer writes to any WordPress or WooCommerce table**. Per-order processing state moved to a new \`wp_wcm_order_state\` table. Legacy \`_wcm_geocoded\` and \`_wcm_geocode_attempts\` postmeta is migrated on first load and **left in place untouched**. No \`$order->save()\` calls anywhere — eliminates the risk of cascading \`woocommerce_update_order\` hooks firing through the plugin ecosystem.

A new CI stage \`safety_check\` greps the source for any SQL writing to forbidden tables and fails the build if one is reintroduced.

- HPOS state row.
- "Tables owned" / "Read-only" section listing every table the plugin will and won't touch.

Safe for all installs. The migration is idempotent (\`INSERT IGNORE\` on the order_id PK). Legacy postmeta is never modified.