Description
ZHBackup – Restore & Migration is a full-site WordPress backup and restore plugin built for real migration workflows. It packages your database, media, plugins, themes, selected wp-content folders, root files, and optional custom root folders, then restores them through a chunked process designed to avoid request timeouts.
The database is stored as a structured package instead of one large SQL replay file, so large page-builder data, post meta, options, and other oversized values can be restored in smaller, traceable steps. Live activity logs show the progress of exports, imports, database rows, large values, file restore, validation, and cleanup.
After a restore, ZHBackup lets you review the site first and run stale-file cleanup separately from the restore process. This keeps restore completion predictable while still giving you a controlled way to remove old plugins, uploads, themes, and selected root-folder files that are not present in the backup.
Key Features:
- Full-Site Backups — Back up the database, uploads, plugins, themes, mu-plugins, selected
wp-contentfolders, root files, and optional custom root folders. - Structured Database Package — Export database schemas, row chunks, and large values separately for reliable restores of Elementor/page-builder data and other large rows.
- Chunked Export and Restore — Process database and file operations in small AJAX steps to reduce timeout and memory-limit issues.
- Browser Upload or Server Restore — Upload backups through the browser in resumable chunks, or place backups on the server via FTP/SFTP and restore from a table of available files.
- Flexible Archive Formats — Create standard
.zipbackups or optimized.zhbackuparchives. - Live Activity Logs — Follow professional export/import logs with database checkpoints, row counts, large-value restore events, file progress, validation, and cleanup status.
- Post-Restore Cleanup — Save a cleanup plan after restore and run stale-file cleanup manually after reviewing the restored site.
- Serialized-Safe Find & Replace — Update URLs safely across serialized PHP data, JSON-escaped URLs, and Elementor widget data.
- Secure Backup Storage — Store backups outside the webroot when available, with
.htaccess,web.config, andindex.phpprotections when stored inside the site. - Retention Policies — Automatically clean up older backups by count or age using WP-Cron.
- No Required Account — Use all backup, restore, migration, and cleanup features without a license key or forced signup.
ww.wp.xz.cn Compliant:
- No obfuscated or encoded PHP
- Proper sanitization for all inputs
- Escaped outputs throughout
- Nonces for all form submissions
- Capability checks on every action
- No hidden external API calls
- No telemetry without explicit consent
External services
ZHBackup includes an optional newsletter signup form on the plugin Settings page.
This feature connects to an external service hosted by Hassan Zain at hassanzain.com. It is used only to add the submitted email address to the ZHBackup newsletter or product updates list.
Data is sent only when an administrator manually submits the optional signup form. The plugin does not contact this service during normal backup, restore, migration, import, export, or find-and-replace usage.
When the form is submitted, the plugin sends:
- Email address entered in the signup form
- Site URL (
home_url()) - Plugin slug (
zhbackup) - Plugin version
Terms of service: https://hassanzain.com/terms-and-conditions
Privacy policy: https://hassanzain.com/privacy-policy
Privacy
ZHBackup does not send telemetry or usage analytics during normal backup, restore, migration, import, export, or find-and-replace operations.
The only optional external data transfer is the administrator-initiated newsletter signup described above.
Screenshots

Export screen for choosing backup components, wp-content folders, optional folders and files, and the backup archive format. 
Existing backups table with backup contents, file size, date, download, restore, and delete actions. 
Import screen with chunked browser upload plus server-side backup restore from uploaded .zipor.zhbackupfiles.
Find & Replace screen for serialized-safe URL replacement across WordPress database tables. 
Restore Cleanup screen for reviewing and running pending stale-file cleanup after a restore. 
Settings screen showing storage security status, backup engine details, and server health checks.
Installation
- Upload the
zhbackupfolder towp-content/plugins/. - Activate the plugin through the Plugins menu in WordPress.
- Navigate to ZHBackup in the admin sidebar to start creating backups.
Alternatively:
- Go to Plugins Add New in your WordPress admin.
- Search for “ZHBackup – Restore & Migration”.
- Click Install Now, then Activate.
FAQ
-
Yes. ZHBackup uses chunked export, upload, import, and restore steps so each request stays small. The database is also restored table-by-table from a structured package instead of replaying one large SQL file.
-
How large of a site can this handle?
-
There is no fixed size limit in the plugin. Very large sites depend on available disk space, PHP limits, and database performance, but ZHBackup is designed to process large file sets and databases in small resumable steps.
-
How does ZHBackup handle large Elementor or page-builder data?
-
Large database values are stored separately from normal row chunks and restored in smaller append operations. This helps preserve large
_elementor_data, post meta, options, and other oversized rows during restore. -
What is the difference between `.zip` and `.zhbackup`?
-
Both formats can contain the same backup data.
.zipis a standard archive format..zhbackupis ZHBackup’s optimized archive format for this plugin. Both support the structured database package. -
Can I restore a backup uploaded by FTP or File Manager?
-
Yes. Upload a
.zipor.zhbackupfile to the backup storage directory shown on the Import screen. It will appear in the server backup table, where you can restore it directly. -
Where are backups stored?
-
The plugin automatically selects the most secure location. It prefers a directory outside the webroot (not accessible via browser), but falls back to
wp-content/zhbackup-backups/if needed, where files are protected by.htaccessrules. -
Can I include custom folders from the WordPress root?
-
Yes. The export screen can include optional first-level folders from the WordPress root. WordPress core folders such as
wp-admin,wp-includes, andwp-contentare handled separately or excluded automatically. -
Can I import a backup from a different domain?
-
Yes. After importing, use the built-in Find & Replace tool to update old URLs to your new domain. It handles serialized data safely, including Elementor widget data.
-
What is post-restore cleanup?
-
Restore copies files from the backup first. If older files or folders still exist on the destination site, ZHBackup saves a cleanup plan. After you verify the restored site, go to ZHBackup Cleanup to remove stale files that are not present in the backup.
-
Will cleanup fail the restore if file permissions block deletion?
-
No. Cleanup is manual and best-effort. Permission-related deletion failures are logged as warnings so the restore can remain complete and you can review any paths that need manual attention.
-
Is the email signup required?
-
No. The email signup on the Settings page is completely optional and can be dismissed permanently. The plugin is fully functional without it.
-
Is the `.zhbackup` format free to use?
-
Yes. The
.zhbackupexport format is included for free and does not require any license key or activation page. -
Does this plugin make external API calls?
-
Yes, but only for the optional newsletter signup on the Settings page after an administrator explicitly enters an email address and submits the form. No data is sent anywhere during backup, restore, migration, import, export, or find-and-replace operations.
-
Will importing overwrite my existing site?
-
Yes. Importing a backup restores the backed-up database and files over the current site. Always create a fresh backup of the current site before importing.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“ZHBackup – Restore & Migration” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “ZHBackup – Restore & Migration” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.0.0
- Added a structured database package that exports schema files, table row chunks, and separate large-value files for reliable full-site restores.
- Added table-by-table database restore with checkpoints, validation, large-value restoration, URL migration support, and detailed activity logs.
- Added optional custom root folder backup and restore for first-level folders in the WordPress root.
- Added manual post-restore cleanup so administrators can review the restored site before removing stale files.
- Added a redesigned admin experience with cleaner backup options, optional item grouping, compact backup tables, icon tooltips, and professional live logs.
- Improved server-side import with a table of available backups and one-click restore actions.
- Improved backup content selection for database, root files, wp-content folders, root folders, archive format, and additional database tables.
- Improved archive support for both
.zipand.zhbackupformats.
1.0.0
- Initial public release.
- Full site backup with chunked AJAX export and import.
- Support for
.zipand.zhbackupbackup formats. - Chunked, resumable browser uploads for large imports.
- Server-side import from backups uploaded via FTP/SFTP.
- Serialized-safe find and replace with Elementor support.
- Automatic secure storage with
.htaccess,web.config, andindex.phpprotection. - Backup retention policies (by count or age).
- ZipArchive with PclZip fallback.
- Optional, dismissible email signup with no forced account requirement.
- ww.wp.xz.cn-compliant release with no license activation system.
