=== ZHBackup – Restore & Migration === Contributors: zainhassandeveloper Tags: backup, import, export, migration, database Requires at least: 5.8 Tested up to: 6.9 Requires PHP: 7.4 Stable tag: 1.0.0 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html All-in-one WordPress backup, migration, and restore plugin with chunked import/export, serialized-safe find & replace, and secure storage. == Description == **ZHBackup – Restore & Migration** is a complete WordPress backup and migration solution. It handles full-site backups including the database, uploads, plugins, themes, mu-plugins, and root files — all via chunked AJAX processing that works on any hosting without timeout issues. **Key Features:** * **Flexible Backup Formats** — Export your entire WordPress site (database + files) as either a standard ZIP archive or a `.zhbackup` archive. * **Chunked Processing** — AJAX-powered chunked export and import to avoid server timeouts, even on shared hosting. * **Resumable Uploads** — Browser-based chunked upload system that survives connection drops and resumes from where it left off. * **Server-Side Import** — Upload large backups via FTP/SFTP and import directly from the server for maximum reliability. * **Serialized-Safe Find & Replace** — URL replacement across all database tables that properly handles serialized data, JSON-escaped URLs, and Elementor widget data. * **Secure Storage** — Backups are stored outside the webroot when possible, protected by `.htaccess`, `web.config`, and `index.php` files. * **Retention Policies** — Automatically clean up old backups by count or age via WP-Cron. * **ZIP Engine Fallback** — Uses ZipArchive when available, falls back to PclZip for full compatibility. * **mysqldump Support** — Options to use native `mysqldump` for faster database exports when available, with automatic PHP fallback. * **No Forced Signup** — The plugin is fully functional without any account or email signup. **WordPress.org 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 == Installation == 1. Upload the `zhbackup` folder to `wp-content/plugins/`. 2. Activate the plugin through the **Plugins** menu in WordPress. 3. Navigate to **ZHBackup** in the admin sidebar to start creating backups. **Alternatively:** 1. Go to **Plugins → Add New** in your WordPress admin. 2. Search for "ZHBackup – Restore & Migration". 3. Click **Install Now**, then **Activate**. == Frequently Asked Questions == = Does this plugin work on shared hosting? = Yes. The chunked AJAX processing is specifically designed to work within typical shared hosting limits for memory, execution time, and upload size. = How large of a site can this handle? = There is no hard limit. The chunked processing system breaks work into small batches, so even sites with thousands of files and large databases can be exported and imported reliably. = 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 `.htaccess` rules. = 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. = 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 `.zhbackup` export 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 will replace your database and files. Always create a fresh backup of your current site before importing. == 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 == 1. ZHBackup dashboard with backup and restore actions. 2. Backup creation options for database and site files. 3. Import workflow for restoring or migrating a backup archive. 4. Find and replace tool for updating URLs after migration. 5. Settings screen with retention and optional signup controls. == Changelog == = 1.0.0 = * Initial public release. * Full site backup with chunked AJAX export and import. * Support for `.zip` and `.zhbackup` backup 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`, and `index.php` protection. * Backup retention policies (by count or age). * ZipArchive with PclZip fallback and optional `mysqldump` support. * Optional, dismissible email signup with no forced account requirement. * WordPress.org-compliant release with no license activation system. == Upgrade Notice == = 1.0.0 = Initial release. Install and start backing up your site.