{"id":287187,"date":"2026-04-22T12:17:38","date_gmt":"2026-04-22T12:17:38","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/snapbackup-restore-migration\/"},"modified":"2026-04-22T12:16:55","modified_gmt":"2026-04-22T12:16:55","slug":"zhbackup","status":"publish","type":"plugin","link":"https:\/\/vi.wordpress.org\/plugins\/zhbackup\/","author":23100270,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"ZHBackup \u2013 Restore & Migration","header_author":"Zain Hassan","header_description":"Fast and lightweight WordPress backup, restore, and migration plugin. Generate full-site ZIP backups including database and files with secure restore support.","assets_banners_color":"5ba3d1","last_updated":"2026-04-22 12:16:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/hassanzain.com\/zhbackup","header_author_uri":"https:\/\/hassanzain.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":58,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"zainhassandeveloper","date":"2026-04-22 12:16:55"}},"upgrade_notice":{"1.0.0":"<p>Initial release. Install and start backing up your site.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3512806,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3512806,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3512806,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3512806,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3512806,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3512806,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3512806,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3512806,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3512806,"resolution":"5","location":"assets","locale":""}},"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."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[151,153,1859,87,4155],"plugin_category":[59],"plugin_contributors":[260819],"plugin_business_model":[],"class_list":["post-287187","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-database","plugin_tags-export","plugin_tags-import","plugin_tags-migration","plugin_category-utilities-and-tools","plugin_contributors-zainhassandeveloper","plugin_committers-zainhassandeveloper"],"banners":{"banner":"https:\/\/ps.w.org\/zhbackup\/assets\/banner-772x250.png?rev=3512806","banner_2x":"https:\/\/ps.w.org\/zhbackup\/assets\/banner-1544x500.png?rev=3512806","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/zhbackup\/assets\/icon-128x128.png?rev=3512806","icon_2x":"https:\/\/ps.w.org\/zhbackup\/assets\/icon-256x256.png?rev=3512806","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/zhbackup\/assets\/screenshot-1.png?rev=3512806","caption":"ZHBackup dashboard with backup and restore actions."},{"src":"https:\/\/ps.w.org\/zhbackup\/assets\/screenshot-2.png?rev=3512806","caption":"Backup creation options for database and site files."},{"src":"https:\/\/ps.w.org\/zhbackup\/assets\/screenshot-3.png?rev=3512806","caption":"Import workflow for restoring or migrating a backup archive."},{"src":"https:\/\/ps.w.org\/zhbackup\/assets\/screenshot-4.png?rev=3512806","caption":"Find and replace tool for updating URLs after migration."},{"src":"https:\/\/ps.w.org\/zhbackup\/assets\/screenshot-5.png?rev=3512806","caption":"Settings screen with retention and optional signup controls."}],"raw_content":"<!--section=description-->\n<p><strong>ZHBackup \u2013 Restore &amp; Migration<\/strong> is a complete WordPress backup and migration solution. It handles full-site backups including the database, uploads, plugins, themes, mu-plugins, and root files \u2014 all via chunked AJAX processing that works on any hosting without timeout issues.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Flexible Backup Formats<\/strong> \u2014 Export your entire WordPress site (database + files) as either a standard ZIP archive or a <code>.zhbackup<\/code> archive.<\/li>\n<li><strong>Chunked Processing<\/strong> \u2014 AJAX-powered chunked export and import to avoid server timeouts, even on shared hosting.<\/li>\n<li><strong>Resumable Uploads<\/strong> \u2014 Browser-based chunked upload system that survives connection drops and resumes from where it left off.<\/li>\n<li><strong>Server-Side Import<\/strong> \u2014 Upload large backups via FTP\/SFTP and import directly from the server for maximum reliability.<\/li>\n<li><strong>Serialized-Safe Find &amp; Replace<\/strong> \u2014 URL replacement across all database tables that properly handles serialized data, JSON-escaped URLs, and Elementor widget data.<\/li>\n<li><strong>Secure Storage<\/strong> \u2014 Backups are stored outside the webroot when possible, protected by <code>.htaccess<\/code>, <code>web.config<\/code>, and <code>index.php<\/code> files.<\/li>\n<li><strong>Retention Policies<\/strong> \u2014 Automatically clean up old backups by count or age via WP-Cron.<\/li>\n<li><strong>ZIP Engine Fallback<\/strong> \u2014 Uses ZipArchive when available, falls back to PclZip for full compatibility.<\/li>\n<li><strong>mysqldump Support<\/strong> \u2014 Options to use native <code>mysqldump<\/code> for faster database exports when available, with automatic PHP fallback.<\/li>\n<li><strong>No Forced Signup<\/strong> \u2014 The plugin is fully functional without any account or email signup.<\/li>\n<\/ul>\n\n<p><strong>WordPress.org Compliant:<\/strong><\/p>\n\n<ul>\n<li>No obfuscated or encoded PHP<\/li>\n<li>Proper sanitization for all inputs<\/li>\n<li>Escaped outputs throughout<\/li>\n<li>Nonces for all form submissions<\/li>\n<li>Capability checks on every action<\/li>\n<li>No hidden external API calls<\/li>\n<li>No telemetry without explicit consent<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>ZHBackup includes an optional newsletter signup form on the plugin Settings page.<\/p>\n\n<p>This feature connects to an external service hosted by Hassan Zain at <code>hassanzain.com<\/code>. It is used only to add the submitted email address to the ZHBackup newsletter or product updates list.<\/p>\n\n<p>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.<\/p>\n\n<p>When the form is submitted, the plugin sends:<\/p>\n\n<ul>\n<li>Email address entered in the signup form<\/li>\n<li>Site URL (<code>home_url()<\/code>)<\/li>\n<li>Plugin slug (<code>zhbackup<\/code>)<\/li>\n<li>Plugin version<\/li>\n<\/ul>\n\n<p>Terms of service: https:\/\/hassanzain.com\/terms-and-conditions\nPrivacy policy: https:\/\/hassanzain.com\/privacy-policy<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>ZHBackup does not send telemetry or usage analytics during normal backup, restore, migration, import, export, or find-and-replace operations.<\/p>\n\n<p>The only optional external data transfer is the administrator-initiated newsletter signup described above.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>zhbackup<\/code> folder to <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>ZHBackup<\/strong> in the admin sidebar to start creating backups.<\/li>\n<\/ol>\n\n<p><strong>Alternatively:<\/strong><\/p>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> in your WordPress admin.<\/li>\n<li>Search for \"ZHBackup \u2013 Restore &amp; Migration\".<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20work%20on%20shared%20hosting%3F\"><h3>Does this plugin work on shared hosting?<\/h3><\/dt>\n<dd><p>Yes. The chunked AJAX processing is specifically designed to work within typical shared hosting limits for memory, execution time, and upload size.<\/p><\/dd>\n<dt id=\"how%20large%20of%20a%20site%20can%20this%20handle%3F\"><h3>How large of a site can this handle?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"where%20are%20backups%20stored%3F\"><h3>Where are backups stored?<\/h3><\/dt>\n<dd><p>The plugin automatically selects the most secure location. It prefers a directory outside the webroot (not accessible via browser), but falls back to <code>wp-content\/zhbackup-backups\/<\/code> if needed, where files are protected by <code>.htaccess<\/code> rules.<\/p><\/dd>\n<dt id=\"can%20i%20import%20a%20backup%20from%20a%20different%20domain%3F\"><h3>Can I import a backup from a different domain?<\/h3><\/dt>\n<dd><p>Yes. After importing, use the built-in <strong>Find &amp; Replace<\/strong> tool to update old URLs to your new domain. It handles serialized data safely, including Elementor widget data.<\/p><\/dd>\n<dt id=\"is%20the%20email%20signup%20required%3F\"><h3>Is the email signup required?<\/h3><\/dt>\n<dd><p>No. The email signup on the Settings page is completely optional and can be dismissed permanently. The plugin is fully functional without it.<\/p><\/dd>\n<dt id=\"is%20the%20%60.zhbackup%60%20format%20free%20to%20use%3F\"><h3>Is the `.zhbackup` format free to use?<\/h3><\/dt>\n<dd><p>Yes. The <code>.zhbackup<\/code> export format is included for free and does not require any license key or activation page.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20make%20external%20api%20calls%3F\"><h3>Does this plugin make external API calls?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"will%20importing%20overwrite%20my%20existing%20site%3F\"><h3>Will importing overwrite my existing site?<\/h3><\/dt>\n<dd><p>Yes. Importing a backup will replace your database and files. Always create a fresh backup of your current site before importing.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Full site backup with chunked AJAX export and import.<\/li>\n<li>Support for <code>.zip<\/code> and <code>.zhbackup<\/code> backup formats.<\/li>\n<li>Chunked, resumable browser uploads for large imports.<\/li>\n<li>Server-side import from backups uploaded via FTP\/SFTP.<\/li>\n<li>Serialized-safe find and replace with Elementor support.<\/li>\n<li>Automatic secure storage with <code>.htaccess<\/code>, <code>web.config<\/code>, and <code>index.php<\/code> protection.<\/li>\n<li>Backup retention policies (by count or age).<\/li>\n<li>ZipArchive with PclZip fallback and optional <code>mysqldump<\/code> support.<\/li>\n<li>Optional, dismissible email signup with no forced account requirement.<\/li>\n<li>WordPress.org-compliant release with no license activation system.<\/li>\n<\/ul>","raw_excerpt":"All-in-one WordPress backup, migration, and restore plugin with chunked import\/export, serialized-safe find &amp; replace, and secure storage.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/287187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=287187"}],"author":[{"embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/zainhassandeveloper"}],"wp:attachment":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=287187"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=287187"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=287187"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=287187"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=287187"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=287187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}