WordPress Plugins

WP Reset PRO Review: rebuild any WordPress site safely

WP Reset PRO lets WordPress devs reset, snapshot, and recover a site in seconds. Full review of snapshots, collections, ERS, cloud storage, hooks, and WP-CLI.

WP Reset PRO Review: rebuild any WordPress site safely review on GPL Times

Some plugins you install once and forget. WP Reset PRO is the opposite. It is the utility you keep on every dev box, every staging site, and every "I am about to do something risky" production site, because it lets you wipe state in seconds and roll back when an update goes sideways. If you build, fix, or just maintain WordPress sites, this is the kind of tool that quietly saves you hours every month.

This article walks through everything WP Reset PRO can do, who it’s actually for, where it fits next to backup tools like UpdraftPlus or Duplicator Pro (it is not a replacement for those, more on that later), and how to use it from the admin AND the command line. Both novices and developers should walk away with a clear picture.

Table of Contents

What is WP Reset PRO?

WP Reset PRO is a WordPress development and maintenance utility built by WebFactory Ltd. It is best described as a Swiss-army knife for the WordPress database: you can reset all or part of the site to a clean install, take database snapshots before you touch anything risky, restore those snapshots when an update breaks the site, install a curated collection of plugins and themes in one click, recover a broken site through a standalone PHP script that runs outside WordPress, and ship the same operations through WP-CLI for automation.

The free version of WP Reset on the WordPress.org repository covers basic reset operations. The PRO build adds snapshots-as-restore-points, plugin & theme collections, the Emergency Recovery Script (ERS), cloud storage integrations (WPReset Cloud, Dropbox, Google Drive, pCloud, Icedrive), white-label/license-manager mode, and a full WP-CLI surface.

Here is the important framing: WP Reset PRO is not a backup plugin. Snapshots store the database only. Files in /uploads/, /themes/, and /plugins/ are not included. For full-site backups and migrations you still want something like UpdraftPlus Premium or Duplicator Pro. WP Reset is the dev-and-maintenance complement: it lets you safely break things and undo the breakage.

If that distinction sounds picky, it is the single most common misconception about the plugin and worth pinning down early.

Key features

  • Selective site reset. Pick exactly what you want to wipe: full site (re-runs the WordPress installer), only wp_options, only theme options, only transients, only uploads, only .htaccess, only custom tables, only the contents of /wp-content/ (preserving the default subfolders). Each reset is an isolated operation with its own confirmation.
  • Database snapshots. A snapshot is a compressed copy of every wp_* table at a point in time, stored inside the database itself (or exported as a .sql.gz). Take one before an update, restore it if anything breaks. Snapshots are also where the "compare two states" diff view comes from, which is handy when you want to see exactly which option changed after a plugin update.
  • Auto-snapshots. WP Reset can take a snapshot automatically before risky operations like installing, updating, or deleting a plugin or theme. You configure the trigger and it runs in the background.
  • Plugin & theme collections. A collection is a saved list of plugins and themes (from the WordPress.org repository or a custom zip URL) that you can install with one click. Build a "client onboarding kit" once and reuse it on every new site.
  • Emergency Recovery Script. A standalone PHP file you place at the site root. It runs OUTSIDE WordPress, so it works even when the admin is white-screened. It can deactivate all plugins, switch to a default theme, reset the admin password, restore a snapshot, and basic-mode operations work even without a working database connection.
  • Cloud snapshot storage. Push snapshots to WPReset Cloud (WebFactory’s own hosted storage), Dropbox, Google Drive, pCloud, pCloud EU, or Icedrive. Pull them back to a different site to clone a known-good state across environments.
  • WP-CLI integration. Every major action (reset, delete, snapshots) is exposed as a wp reset... command, which is the bit that turns the plugin from a UI utility into something you can wire into Bash scripts, CI pipelines, and cron jobs.
  • License manager / white-label. Higher tiers let you rebrand the plugin in the admin, hide support links, and use WP Reset PRO as a central license manager for other WebFactory plugins (WP Force SSL, WP 301 Redirects, WP Sticky).
  • Nuclear reset. One CLI macro that deletes themes, plugins, uploads, /wp-content/ extras, and runs a site reset. Use this when you genuinely want to flatten everything except the WordPress core install.
  • WordPress core version switcher. Downgrade or upgrade WordPress core from the Tools tab when you need to test a specific compatibility scenario.

How it works (for users)

Once you install and activate WP Reset PRO it lives under Tools -> WP Reset in the WordPress admin. The screen is split into a left-side nav with the main tabs:

  • Reset – the destructive operations, full and partial.
  • Tools – smaller surgical actions (delete transients, purge cache, edit wp-config, delete.htaccess, switch WP version, generate ERS).
  • Snapshots – the snapshot manager.
  • Collections – your plugin/theme bundles.
  • Cloud – link cloud accounts and view remote snapshots.
  • License – activate the PRO license and manage white-label settings.
  • Support – links to documentation and the support form.

The "I am about to break something" workflow looks like this:

  1. Go to Snapshots and click Create snapshot. Give it a name like "before WooCommerce update" so you can recognise it later.
  2. Do the risky thing. Update WooCommerce, swap themes, run a search-replace, whatever it is.
  3. If everything works, delete the snapshot to reclaim space. If something broke, go back to Snapshots, find the named entry, click Restore, confirm the prompt, and you are back to step 1.

A restore is fast on small-to-medium sites because it only replaces database rows. On a 5 GB media library you are not waiting for files to copy back.

The reset workflow is similarly direct. You pick a reset type, type the confirmation phrase ("reset"), and the plugin runs the operation. For full site resets it asks twice, because the operation is genuinely destructive: you keep the current admin user, site URL, site title, and language, and everything else (posts, comments, terms, options, other users) goes away.

Collections are the part that surprised me the first time I used them. You build a "starter kit" once (say Yoast SEO Premium, WP Rocket, Wordfence, Solid Security Pro), save it as a collection, and on every new project you spin up you go to Collections -> Install and the plugin pulls them all in. For agencies doing 20+ new sites a year this is a real time saver.

Installation and setup

Installation is the standard WordPress flow.

  1. Download the WP Reset PRO zip from your account.
  2. In wp-admin, go to Plugins -> Add New -> Upload Plugin.
  3. Upload the zip, click Install Now, then Activate Plugin.
  4. Navigate to Tools -> WP Reset in the sidebar. The first time you open it you will see the dashboard with a getting-started panel.
  5. Open the License tab, paste the license key from your purchase confirmation, and click Activate. PRO features unlock immediately.
  6. Visit Snapshots and create your first snapshot now. Treat it as a baseline. Naming convention: "fresh install YYYY-MM-DD".

A few setup recommendations:

  • Increase PHP max_execution_time to at least 60 seconds on hosts that cap it lower. Snapshot creation on a busy site can take 10-30 seconds; restore is similar.
  • If you plan to use cloud snapshots, link a Dropbox or Google Drive account now via Cloud -> Authorize. The OAuth flow opens in a new tab and writes a token back into WP Reset’s options.
  • If you administer a site that has been live for a while, generate the Emergency Recovery Script (under Tools) and save the recovery URL and password to your password manager. It costs nothing now and may save your weekend later.

Real-world use cases

Use case 1: theme builder demo cleanup. You are building a tutorial on a new page builder. You design five sample pages, then realise you need to start fresh because the readers should see a blank site. With WP Reset you click Reset -> Site, type "reset", and the install is back to a fresh state in seconds. The alternative (manual deletion of posts, terms, and options) takes an order of magnitude longer.

Use case 2: pre-update insurance for a small client site. A real-estate client refuses to pay for managed WordPress hosting. You maintain the site yourself. Before any major plugin update you create a snapshot. (If you also want to control which updates run automatically, a separate update policy plugin pairs well with this.) After the update, you spot-check the front end. If the update silently breaks the property-listing template, the restore takes seconds and the client never sees a regression.

Use case 3: standardised agency new-project bootstrap. Your agency has a base stack: a security plugin, a caching plugin, an SEO plugin, an analytics plugin, and a forms plugin. Building this collection once and running it on every new project means new sites are production-ready 10 minutes after WordPress is installed. Pair it with Code Snippets Pro for the small tweaks you also reuse on every project.

Use case 4: white-screen recovery on a site you don’t have admin access to. A plugin update fataled out and wp-admin is now blank. You have FTP. You upload the Emergency Recovery Script (you generated it months ago, right?) to the site root, hit its URL in the browser, log in with the recovery password, deactivate every plugin, and the admin is back. You then re-activate plugins one at a time to find the bad actor.

Use case 5: scripted nightly reset of a sandbox sandbox. You run a "try our theme" demo sandbox that visitors can edit. A cron job that runs wp reset reset site --yes --reactivate-theme --reactivate-plugins every night at 3 AM keeps the sandbox clean without you babysitting it. We will cover this CLI command in the developer section.

Developer reference

This is where WP Reset. The plugin exposes a deep action and filter surface so you can extend, observe, or block its operations, and a complete WP-CLI command tree so you can automate.

WP-CLI commands

All commands live under the top-level wp reset namespace. The classes are registered in wp-reset-cli.php with WP_CLI::add_command('reset', 'WP_Reset_CLI');.

Reset operations:

# Reset site options (wp_options) only
wp reset reset options --yes

# Reset the full site (re-runs the WP installer, keeps current user)
wp reset reset site --yes --reactivate-theme --reactivate-plugins

# Nuclear: delete themes + plugins + uploads + wp-content extras + reset
wp reset reset nuclear --yes

Delete operations:

# Granular deletes
wp reset delete themes --yes
wp reset delete plugins --yes
wp reset delete transients --yes
wp reset delete uploads --yes
wp reset delete htaccess --yes
wp reset delete theme-options --yes
wp reset delete cache --yes
wp reset delete widgets --yes
wp reset delete wp-content --yes

# Custom (non-wp_) tables
wp reset delete custom-tables --yes # DROP every custom table
wp reset delete custom-tables --empty --yes # TRUNCATE instead of DROP

Snapshots:

# List
wp reset snapshots list

# Create with an optional name
wp reset snapshots create --name="before-woocommerce-update" --yes

# Restore by ID (use list to find the ID)
wp reset snapshots restore --id=abc123 --yes

# Export to a downloadable.sql.gz in /wp-content/wp-reset-snapshots-export/
wp reset snapshots export --id=abc123

# Delete
wp reset snapshots delete --id=abc123 --yes

The --yes flag bypasses the interactive confirmation prompt, which is what you want when these commands run from cron or CI. Without it the plugin will block and wait for input.

Action hooks

WP Reset fires a do_action() call before AND after most destructive operations. This is the right place to hook in if you want to log resets, send notifications, or run cleanup that has to happen alongside a reset. The full list of actions:

  • wp_reset_before_reset_site / wp_reset_reset_site
  • wp_reset_before_reset_options / wp_reset_reset_options
  • wp_reset_before_reset_theme_options / wp_reset_reset_theme_options
  • wp_reset_before_delete_transients / wp_reset_delete_transients
  • wp_reset_before_delete_content / wp_reset_delete_content
  • wp_reset_before_delete_widgets / wp_reset_delete_widgets
  • wp_reset_delete_mu_plugins
  • wp_reset_delete_dropins
  • wp_reset_delete_uploads
  • wp_reset_delete_wp_content
  • wp_reset_deactivate_plugins
  • wp_reset_delete_plugins
  • wp_reset_delete_themes
  • wp_reset_before_truncate_custom_tables / wp_reset_truncate_custom_tables
  • wp_reset_before_drop_custom_tables / wp_reset_drop_custom_tables
  • wp_reset_delete_htaccess / wp_reset_restore_htaccess
  • wp_reset_purge_cache
  • wp_reset_create_snapshot
  • wp_reset_delete_snapshot
  • wp_reset_export_snapshot
  • wp_reset_import_snapshot
  • wp_reset_restore_snapshot
  • wp_reset_change_wp_version

Logging every reset to a custom table so you have a paper trail is a five-line snippet:

add_action( 'wp_reset_reset_site', function( $params ) {
 global $wpdb;
 $wpdb->insert(
 $wpdb->prefix. 'reset_log',
 array(
 'event' => 'reset_site',
 'user_id' => get_current_user_id(),
 'params' => wp_json_encode( $params ),
 'created_at' => current_time( 'mysql' ),
 )
 );
}, 10, 1 );

Sending a Slack ping after a snapshot is created:

add_action( 'wp_reset_create_snapshot', function( $uid, $snapshot ) {
 $msg = sprintf(
 'Snapshot created on %s (id: %s, name: %s)',
 home_url(),
 $uid,
 $snapshot['name']?? 'unnamed'
 );
 wp_remote_post(
 'https://hooks.slack.com/services/XXX/YYY/ZZZ',
 array(
 'body' => wp_json_encode( array( 'text' => $msg ) ),
 'headers' => array( 'Content-Type' => 'application/json' ),
 )
 );
}, 10, 2 );

Refusing to drop custom tables when a specific tenant table is in the list (defensive code for a multi-tenant SaaS):

add_action( 'wp_reset_before_drop_custom_tables', function( $params ) {
 global $wpdb;
 $protected = $wpdb->prefix. 'tenant_data';
 if ( in_array( $protected, (array) ( $params['tables']?? array() ), true ) ) {
 wp_die( 'Refusing to drop the protected tenant_data table.' );
 }
}, 10, 1 );

Filters

The PRO build exposes two notable filters in the main reset flow:

  • wp_reset_show_admin_bar – control whether the WP admin bar is rendered immediately after a reset. Default true.
  • wp-reset-override-is-cli-running – override the CLI-detection logic if you are running the plugin under an unusual SAPI that the auto-detection misses.

Example: keep the admin bar hidden on a sandbox so visitors don’t see WP internals after the nightly reset:

add_filter( 'wp_reset_show_admin_bar', '__return_false' );

There is also a wf_licensing_* filter family (used by the shared WebFactory licensing layer), but you should rarely touch those, they exist for the license server handshake and white-label customisation.

Snapshot internals

If you want to dig into snapshot mechanics, the main class is WP_Reset in wp-reset.php. The methods you care about are do_create_snapshot(), do_restore_snapshot(), do_export_snapshot(), get_snapshots(), and do_delete_snapshot(). Snapshot data lives in two custom tables (wp_wpr_snapshots and wp_wpr_snapshots_data) so a snapshot survives a wp reset reset options call but not a nuclear reset.

Exported snapshots are stored in wp-content/wp-reset-snapshots-export/ as gzipped SQL dumps. The dumper itself is in libs/wpr_db_dumper.php and prefers mysqldump via shell when available, falling back to a native PHP dumper. On hosts that block shell_exec() you will get the native dumper, which is slower on very large tables but works everywhere.

The diff engine that powers the "compare snapshots" view is libs/diff.php (class WPR_Diff). It produces a row-level diff between two snapshot states, which is handy for figuring out exactly which option a plugin update changed.

Performance, compatibility, and gotchas

Snapshot size is database-only. Worth saying again. A 5 GB site might have a 50 MB snapshot if most of that 5 GB is uploaded images. The snapshot will not include the images. If you delete /uploads/ and restore the snapshot, your media library entries are back in the database but the actual files are gone.

Snapshots are stored inside the database by default. They sit in wp_wpr_snapshots_data as gzipped blobs. On large sites this can bloat your DB faster than you expect; ten 50 MB snapshots add 500 MB to the live database. The cloud storage option exists partly to solve this: push snapshots to Dropbox or WPReset Cloud and delete the local copy.

Restore is destructive. Restoring a snapshot replaces every wp_* table with the snapshot version. Any rows that existed only between snapshot-create and snapshot-restore are gone. New comments, new orders, new posts. If your site is taking real-money WooCommerce orders, snapshot-restore is the wrong tool; use a real backup for that scenario.

Custom tables outside the wp_ prefix. Snapshots default to including only the standard wp_* tables. If you have non-prefixed custom tables (some legacy plugins do this), open the snapshot create dialog and add them manually. Otherwise they are not captured.

Multisite. WP Reset works on multisite but operates on the current subsite only. There is no "reset the entire network in one click" option, by design. You run it per subsite from inside that subsite’s admin.

Reset keeps the current user. A full site reset preserves only the user running the reset. All other users are deleted. If you reset while logged in as user A, user A survives; users B, C, D are gone. This is intentional, but the first time it bites you it’s a surprise.

Emergency Recovery Script security. ERS sits at the site root as a PHP file with a known structure. WebFactory randomises the filename and protects it with a password, but the file is still a piece of executable PHP outside the normal WordPress flow. Delete it after you use it, or at least rotate the password regularly. Don’t leave a default-passworded ERS on a production server.

Cache plugin interactions. When WP Reset purges cache (Tools -> Purge cache, or wp reset delete cache) it attempts to call the public flush API of every known cache plugin: WP Rocket, W3 Total Cache, WP Super Cache, SiteGround Optimizer, Endurance Page Cache, and a few others. If you use a less common cache plugin you may need to flush its cache separately.

WordPress core version switch. The version switcher in Tools is convenient but only goes as far back as WordPress.org’s archive holds. Going to a very old version on a site running modern PHP can break your install in different ways; use the switcher on staging first.

File permissions for nuclear reset. A full nuclear reset needs write permission on /wp-content/ and all its subfolders. On hosts that lock down permissions (some managed WordPress hosts) the nuclear reset will partially succeed: it deletes what it can and reports the rest as failed. Read the report.

Pricing and licensing

WP Reset PRO is sold from wpreset.com on annual and lifetime tiers (Personal, Business, Agency, Tier 3). Higher tiers unlock WPReset Cloud storage, white-label settings, and license-manager-mode for other WebFactory plugins. The Personal tier is enough for a freelancer with a handful of sites; the Agency and Tier 3 tiers are for shops running dozens of client sites where the white-label and central license features actually pay off.

The build available on the WP Reset PRO product page at GPL Times is GPL-licensed and unlocked for unlimited sites. Every WordPress plugin sold under GPL has this property: the code is freely redistributable as long as you respect the GPL.

  1. The license key prompt still appears in the admin. You can ignore it; the plugin functions without an active vendor license on the GPL-licensed version. Some PRO features that rely on the WebFactory license server (the dashboard.wpreset.com sync) are mocked to return success.
  2. WPReset Cloud (the hosted snapshot storage) requires the vendor backend, so the cloud bucket itself is not available on the GPL-licensed version. Dropbox, Google Drive, pCloud, and Icedrive integrations still work because they use the user’s own OAuth credentials.
  3. The white-label / license-manager UI is unlocked. You can rebrand the plugin in admin and use it as a license manager for other WebFactory plugins.

FAQ

Is WP Reset PRO a backup plugin?
No, and this matters. Snapshots capture database state only, not files. For full-site backups including media library, themes, and plugins, you need a dedicated backup plugin. UpdraftPlus Premium or Solid Backups (formerly BackupBuddy) are good options.

Can I undo a reset?
Only if you took a snapshot before the reset. The plugin nudges you to create one before any destructive action, but if you skipped that step the reset is permanent. Auto-snapshots (configured in Snapshots -> Settings) reduce the risk by taking a snapshot for you before plugin/theme updates.

Does the Emergency Recovery Script need the database to be up?
For most operations, yes. ERS reads its config from the database and runs against wp-config.php. There is a "basic mode" where ERS can deactivate plugins and switch themes by manipulating files directly, even with a broken DB connection. So even on a totally dead site, ERS can usually get you to a working admin.

Will WP Reset PRO work on a managed WordPress host (Kinsta, WP Engine, Pressable, etc.)?
Yes, with one caveat. Managed hosts often restrict shell_exec() and may sandbox file deletion outside /uploads/. Snapshot creation falls back to the native PHP dumper on those hosts (slower but works). The nuclear reset may not fully clean /wp-content/ if the host’s file permissions block it.

Can I use snapshots for migration between sites?
Sort of. Export a snapshot from site A, import it on site B via Snapshots -> Import. The DB content moves over. But because files don’t move with the snapshot, you will still need to copy /uploads/ separately, and you’ll need to update any hard-coded site URLs in option values (the plugin doesn’t do search-replace). For real migrations, use WP Migrate Pro, Duplicator Pro, or All-in-One WP Migration.

Can I exclude specific tables from a snapshot?
Yes, in the snapshot create dialog there is a list of tables and you can untick the ones you want to skip. Useful when you have a giant logs or analytics table that you don’t need versioned.

Is there a free version?
Yes. The free WP Reset on WordPress.org handles full and partial resets. Snapshots, collections, ERS, cloud, CLI, and white-label are PRO-only.

Does WP Reset PRO play well with security plugins?
Mostly. Security plugins that lock down admin actions (Wordfence, Solid Security Pro) won’t block WP Reset as long as the running user has the administrator capability. Two-factor auth on the admin user still applies. The Emergency Recovery Script bypasses WP login by design, so your security plugin’s 2FA does NOT protect ERS access; the ERS password is the only protection. Use a long random password.

Can I automate snapshots from cron?
Yes. wp reset snapshots create --name="nightly" --yes from system cron does the trick. Combine with a small Bash script that exports the snapshot, ships it to cloud storage, and prunes old ones, and you have a free homegrown DB versioning system.

Final thoughts

WP Reset PRO is one of those plugins that doesn’t sell itself by adding more features to your site, it sells itself by removing fear. Once you have it installed, "let me try this update real quick" stops being a sentence that ends in a panicked support ticket. You snapshot, try, restore if needed, and move on. For agencies running many client sites, the collections feature alone justifies the cost the first time you spin up a new site in fifteen minutes instead of two hours.

The framing as a development and maintenance utility matters. If you came here looking for a backup plugin you are in the wrong shop. But if you build, fix, or maintain WordPress sites, WP Reset PRO complements your backup plugin and quietly handles a category of work that nothing else does as cleanly. Pair it with Code Snippets Pro for code-level reusables, and a real backup plugin for file-level safety, and you have a stack that survives.

The CLI surface is what tips this from "useful" to "I install it everywhere". wp reset snapshots create --yes in a pre-deploy hook, wp reset reset site --yes in a nightly sandbox-cleanup cron, wp reset reset nuclear --yes when you want to scorch a staging environment back to a fresh WordPress install: those three commands replace a lot of bespoke shell scripting.

If you maintain more than one or two WordPress sites and you do not have WP Reset PRO (or its free sibling) installed, I would put it on the shortlist of plugins to add next.