WP Engine Staging Push Can Overwrite WooCommerce Orders: The Data Loss Nobody Warns You About

By Daniel Brooks · Updated 2026 · WordPress developer tracking managed hosting

Affiliate disclosure: some links below are affiliate links. The staging mechanics documented here come from WP Engine's official support docs and WooCommerce's developer documentation.

You copy production to staging on Monday. You spend the week testing a plugin update. Customers place orders Tuesday through Friday. On Friday afternoon, you push staging to production. Every order from the week is gone. Not corrupted, not partially overwritten. Gone. The staging database from Monday replaced the production database from Friday, and every order, customer account, and subscription change that happened in between was overwritten by a snapshot that did not contain them. This is not a WP Engine bug. It is how staging works on every managed WordPress host. But WP Engine's push UI does not stop you, and the warnings are buried in a separate document that most store owners never read.

The rule: Never push the database from staging to a live WooCommerce store. Push files only (themes, plugins, uploads). If you must push database tables, use WP Engine's Custom Copy with selective table exclusion and exclude all order tables. With HPOS enabled, exclude: wp_wc_orders, wp_wc_order_addresses, wp_wc_order_operational_data, wp_wc_orders_meta. Without HPOS, orders live in wp_posts, which you cannot exclude without losing all content.

How the data loss happens

WP Engine's Copy Environments feature offers two modes: Full Copy (all files + all database tables, complete overwrite) and Custom Copy (select files, database, or both, with optional table selection). The official documentation states it plainly:

"We do not recommend pushing the entire database to the production environment. If you do, the production database will be completely overwritten. This destructive process can cause the loss of important data, such as new orders or users."

Their Development Workflow Best Practices doc is more direct: "It is NEVER advised to include a database when copying to a live site." And: "Copying a database from your development instance will destroy newly added, live data."

The problem is that the warnings exist in documentation, not in the push UI. A store owner clicking "Push to Production" in the WP Engine dashboard sees the copy options but not an inline warning about WooCommerce orders. The ecommerce-specific guidance is in a separate Best Practices for eCommerce Sites document that you find only if you search for it.

WP Engine does create automatic backups of both source and destination environments before and after the copy. If you catch the problem immediately, you can restore from backup. If you discover the missing orders days later, after the backup retention window, the orders are unrecoverable.

Why HPOS changes the game

Traditional WooCommerce stores orders in wp_posts (as the shop_order custom post type) and wp_postmeta. This creates an impossible choice: exclude wp_posts from your staging push to protect orders, and you also exclude every page, post, and piece of content on your site. Or include wp_posts and lose every order placed since your staging snapshot.

High-Performance Order Storage (HPOS), default for new WooCommerce installations since version 8.2 (October 2023), moves orders to dedicated tables:

With HPOS enabled, you can use WP Engine's selective table push to exclude these four tables while pushing everything else. Orders stay in production, untouched. Content, settings, and plugin data get updated from staging. This is the first time the staging problem has had a clean technical solution.

The catch: older stores that have not migrated to HPOS still store orders in wp_posts. If your store has been running since before WooCommerce 8.2, check your WooCommerce > Settings > Advanced > Features page for "Custom order tables" status. If it says "Not in use," your orders are still in wp_posts and selective table exclusion will not help.

Which hosts have this problem (all of them)

This is not a WP Engine-specific issue. Every managed WordPress host with a staging feature has the same underlying problem because WordPress databases are not designed for partial merging. Delicious Brains, makers of WP Migrate DB Pro, retired their Mergebot product after concluding that automatic database merging between WordPress environments is not reliably achievable.

What differs between hosts is the mitigation tooling:

HostFiles-only pushSelective table pushWooCommerce warning
WP EngineYesYesYes (separate doc)
KinstaYesYes (since Aug 2023)Yes (inline)
CloudwaysYesYes (since 2020)Yes
SiteGroundCustom DeployYes (table-level)No
PressableNo (data transfer only)NoYes (explicit warning)
Flywheel (WP Engine-owned)Yes (uncheck DB)NoPartial

Pressable is the most restrictive: no selective table push, and they explicitly warn against using staging with WooCommerce. Flywheel (owned by WP Engine since 2019) offers only a binary checkbox for database inclusion with no table selection. WP Engine's own platform has better staging tools than its subsidiary.

The safe workflow for WooCommerce staging

WP Engine's own recommended workflow: code moves UP to production, the database moves DOWN to develop. In practice:

  1. Copy production to staging (this direction is safe, fresh snapshot of live data)
  2. Make your changes on staging (theme edits, plugin updates, custom code)
  3. Test on staging (verify nothing breaks)
  4. Push files only to production (Custom Copy > select files, deselect database)
  5. If you need database changes in production, make them directly in production or use WP-CLI/migration scripts

If you absolutely must push database tables (for example, you restructured widget areas or menu items that live in the database), use Custom Copy with selective tables and exclude at minimum:

The WP STAGING Pro plugin ($89-239/year as of 2026) offers a "Skip WooCommerce Orders and Products" feature that automates this exclusion. InstaWP's 2-Way Sync takes a different approach with event-based change tracking, though it only captures changes made through the WordPress admin interface.

The bottom line: if your store processes even a handful of orders per week, treat the database push button as a "delete orders" button and plan accordingly.

FAQ

Can WP Engine staging overwrite WooCommerce orders?

Yes. Pushing the staging database to production replaces the production database with the staging snapshot. Any orders placed between the snapshot and the push are overwritten. WP Engine documents this risk but the warning is in a separate ecommerce best practices doc, not in the push UI.

How do I push staging without losing WooCommerce orders?

Use Custom Copy and push files only (no database). If you must push database tables, enable selective table exclusion and remove all WooCommerce order tables. With HPOS: exclude wp_wc_orders, wp_wc_order_addresses, wp_wc_order_operational_data, wp_wc_orders_meta. Without HPOS, orders are in wp_posts, which cannot be excluded without losing all content.

Does HPOS fix the WooCommerce staging problem?

It makes it solvable. HPOS moves orders to dedicated tables that can be individually excluded from staging pushes. Without HPOS, orders share the wp_posts table with all other content and cannot be separated. Check WooCommerce > Settings > Advanced > Features to see if HPOS is enabled on your store.

Which managed WordPress hosts have this staging problem?

All of them. The problem is how WordPress databases work, not a host bug. WP Engine, Kinsta, and Cloudways offer selective table push as mitigation. Pressable and Flywheel do not. The safest approach on any host is to never push database from staging to a live store.