{"id":358846,"date":"2026-08-30T18:18:17","date_gmt":"2026-08-30T18:18:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/siternet-website-migration\/"},"modified":"2026-09-24T21:48:56","modified_gmt":"2026-09-24T21:48:56","slug":"siternet-website-migration","status":"publish","type":"plugin","link":"https:\/\/sk.wordpress.org\/plugins\/siternet-website-migration\/","author":23473855,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.23","stable_tag":"1.2.23","tested":"7.1.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Siternet Website Migration","header_author":"Siternet","header_description":"Export a full site (files + database) to a .zip backup and restore it with drag-and-drop import. URLs are rewritten to the destination domain.","assets_banners_color":"fef4f7","last_updated":"2026-09-24 21:48:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.siternet.com\/themes-plugins\/","header_author_uri":"https:\/\/www.siternet.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":333,"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":"siternet","date":"2026-08-30 18:47:28","revision":3673027},"1.0.1":{"tag":"1.0.1","author":"siternet","date":"2026-08-30 18:52:40","revision":3673035},"1.0.17":{"tag":"1.0.17","author":"siternet","date":"2026-09-01 16:08:19","revision":3676469},"1.0.18":{"tag":"1.0.18","author":"siternet","date":"2026-09-02 14:32:32","revision":3678184},"1.0.2":{"tag":"1.0.2","author":"siternet","date":"2026-08-30 19:08:53","revision":3673048},"1.0.28":{"tag":"1.0.28","author":"siternet","date":"2026-09-02 17:12:00","revision":3678415},"1.0.29":{"tag":"1.0.29","author":"siternet","date":"2026-09-02 17:30:21","revision":3678448},"1.0.3":{"tag":"1.0.3","author":"siternet","date":"2026-08-31 09:26:02","revision":3673756},"1.0.4":{"tag":"1.0.4","author":"siternet","date":"2026-08-31 09:30:45","revision":3673769},"1.0.5":{"tag":"1.0.5","author":"siternet","date":"2026-08-31 11:34:47","revision":3674007},"1.0.6":{"tag":"1.0.6","author":"siternet","date":"2026-09-01 04:49:56","revision":3675269},"1.0.7":{"tag":"1.0.7","author":"siternet","date":"2026-09-01 10:35:31","revision":3675875},"1.0.8":{"tag":"1.0.8","author":"siternet","date":"2026-09-01 11:15:51","revision":3675979},"1.0.9":{"tag":"1.0.9","author":"siternet","date":"2026-09-01 11:18:01","revision":3675983},"1.2.23":{"tag":"1.2.23","author":"siternet","date":"2026-09-24 21:48:56","revision":3712088}},"upgrade_notice":{"1.1.4":"<p>Import uses short steps and auto-retry \u2014 fewer \u201cConnection dropped\u201d stalls on shared hosts.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3673047,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3673047,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3673016,"resolution":"1544x500","location":"assets","locale":"","width":1024,"height":331},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3673016,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.17","1.0.18","1.0.2","1.0.28","1.0.29","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.2.23"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3673030,"resolution":"1","location":"assets","locale":"","width":1024,"height":423},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3673030,"resolution":"2","location":"assets","locale":"","width":1024,"height":383},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3673030,"resolution":"3","location":"assets","locale":"","width":1024,"height":407}},"screenshots":{"1":"Import \u2014 drag-and-drop a .zip backup; URLs rewrite to the destination domain.","2":"Export \u2014 create a full-site .zip backup (files + database) on the host.","3":"Backups \u2014 restore, download, or delete host-side backup archives."}},"plugin_section":[],"plugin_tags":[151,2814,1859,87,4155],"plugin_category":[59],"plugin_contributors":[259925],"plugin_business_model":[],"class_list":["post-358846","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-clone","plugin_tags-export","plugin_tags-import","plugin_tags-migration","plugin_category-utilities-and-tools","plugin_contributors-siternet","plugin_committers-siternet"],"banners":{"banner":"https:\/\/ps.w.org\/siternet-website-migration\/assets\/banner-772x250.png?rev=3673016","banner_2x":"https:\/\/ps.w.org\/siternet-website-migration\/assets\/banner-1544x500.png?rev=3673016","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/siternet-website-migration\/assets\/icon-128x128.png?rev=3673047","icon_2x":"https:\/\/ps.w.org\/siternet-website-migration\/assets\/icon-256x256.png?rev=3673047","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/siternet-website-migration\/assets\/screenshot-1.jpg?rev=3673030","caption":"Import \u2014 drag-and-drop a .zip backup; URLs rewrite to the destination domain."},{"src":"https:\/\/ps.w.org\/siternet-website-migration\/assets\/screenshot-2.jpg?rev=3673030","caption":"Export \u2014 create a full-site .zip backup (files + database) on the host."},{"src":"https:\/\/ps.w.org\/siternet-website-migration\/assets\/screenshot-3.jpg?rev=3673030","caption":"Backups \u2014 restore, download, or delete host-side backup archives."}],"raw_content":"<!--section=description-->\n<p>Siternet Website Migration makes moving a WordPress site simple. Create a full .zip backup of your files and database, restore it on another host with drag-and-drop import, and have links, media, and settings update to the new domain automatically. Or use the Demos tab to export and import only what you need \u2014 images, menus, pages, posts, WooCommerce, users, or a full theme demo \u2014 without replacing the whole site.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Export themes, plugins, uploads, and the database into a standard .zip backup<\/li>\n<li>Import by drag-and-drop (uploads are chunked so typical PHP upload limits are less of a problem)<\/li>\n<li>Rewrite links and media URLs to the destination domain after import<\/li>\n<li>Keep a list of backups on the host for restore, download, or delete<\/li>\n<li>Export\/import selective Demos packs without wiping the whole site<\/li>\n<\/ul>\n\n<h4>Good to know<\/h4>\n\n<ul>\n<li>Backups created by this plugin use its own .zip format<\/li>\n<li>Multisite is not supported in this version<\/li>\n<li>Import\/restore replaces the current site files and database \u2014 use carefully<\/li>\n<\/ul>\n\n<p>Plugin URI: https:\/\/www.siternet.com\/themes-plugins\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>wp-content\/plugins<\/code>, or install from the WordPress admin<\/li>\n<li>Activate <strong>Siternet Website Migration<\/strong><\/li>\n<li>Open <strong>Website Backup<\/strong> in the WordPress admin menu<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20on%20shared%20hosting%3F\"><h3>Does this work on shared hosting?<\/h3><\/dt>\n<dd><p>Yes, as long as the PHP ZipArchive extension is available and the site can write to <code>wp-content<\/code>.<\/p><\/dd>\n<dt id=\"will%20import%20replace%20my%20current%20site%3F\"><h3>Will import replace my current site?<\/h3><\/dt>\n<dd><p>Yes. Import and restore replace files and the database on the destination site. Create a backup first if you need a rollback.<\/p><\/dd>\n<dt id=\"are%20backups%20compatible%20with%20other%20migration%20plugins%3F\"><h3>Are backups compatible with other migration plugins?<\/h3><\/dt>\n<dd><p>No. Use a .zip exported by this plugin.<\/p><\/dd>\n<dt id=\"is%20multisite%20supported%3F\"><h3>Is multisite supported?<\/h3><\/dt>\n<dd><p>Not in this version.<\/p><\/dd>\n<dt id=\"can%20my%20theme%20ship%20ready-made%20demos%3F\"><h3>Can my theme ship ready-made demos?<\/h3><\/dt>\n<dd><p>Yes. Export a demo pack from the Demos tab and put the .zip in a <code>theme-demos<\/code> folder inside the theme (or its parent theme). The Demos tab then lists it with an Import button. Add <code>demo.jpg<\/code> next to <code>demo.zip<\/code> for a screenshot, or a <code>theme-demos\/demos.json<\/code> file:<\/p>\n\n<pre><code>[{\"file\":\"agency.zip\",\"title\":\"Agency\",\"description\":\"One-page agency site\",\"screenshot\":\"agency.jpg\",\"preview\":\"https:\/\/example.com\/agency\"}]\n<\/code><\/pre><\/dd>\n<dt id=\"which%20login%20do%20i%20use%20after%20an%20import%3F\"><h3>Which login do I use after an import?<\/h3><\/dt>\n<dd><p>The users come from the exported site, so log in with a username and password from that site. Then open Settings &gt; Permalinks and click Save Changes twice.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.23<\/h4>\n\n<ul>\n<li>After an import to a new domain, redirects are sent as not cacheable, so a redirect stored by a browser or page cache can no longer replay an old loop (ERR_TOO_MANY_REDIRECTS on the first visit of a page).<\/li>\n<li>Page caches of common cache plugins and Elementor's cache are cleared once on the first normal request after an import or a plugin update.<\/li>\n<\/ul>\n\n<h4>1.2.22<\/h4>\n\n<ul>\n<li>Fix ERR_TOO_MANY_REDIRECTS on the front end after an import when another plugin forces www on the site's domain. The www \/ non-www form of this site's own address is now only changed in the links of the finished page, not in the address WordPress uses to decide redirects.<\/li>\n<li>A redirect is no longer rewritten when the new address is the page being requested, also behind an HTTPS proxy.<\/li>\n<\/ul>\n\n<h4>1.2.21<\/h4>\n\n<ul>\n<li>Fix imports stopping with \"Connection dropped, retrying\u2026 \u2014 Request failed (500)\" while files are restored. The import writes the exported site's plugin and theme files over the ones installed here, and a step request could load a half-copied plugin and crash. During an import, its own step requests now load only this plugin and no theme. A temporary must-use loader does this; it is removed when the import ends and expires after two hours.<\/li>\n<\/ul>\n\n<h4>1.2.20<\/h4>\n\n<ul>\n<li>After an import, links to this site follow its own address: when the site has no www, links with www added are changed to the address without www (and the other way round).<\/li>\n<\/ul>\n\n<h4>1.2.19<\/h4>\n\n<ul>\n<li>After an import to a new domain, links to the exported site are also rewritten in the finished page (links printed as fixed text by themes and plugins), in REST and JSON responses, and in redirects sent without wp_redirect().<\/li>\n<li>Elementor's generated CSS copied from the exported site is removed after an import, so Elementor rebuilds it with this site's URLs.<\/li>\n<\/ul>\n\n<h4>1.2.18<\/h4>\n\n<ul>\n<li>After an import to a new domain, links, login and wp-admin redirects that a theme or plugin still builds for the exported site's domain in code are sent to this site instead. The domains come from the backup and this site's own settings. Nothing is set up for an import onto the same domain.<\/li>\n<li>The destination address is read from this site's own settings, so another plugin's URL filters can no longer change it during an import.<\/li>\n<\/ul>\n\n<h4>1.2.17<\/h4>\n\n<ul>\n<li>Demos tab: when the active theme (or its parent) has a theme-demos folder with demo packs, they are listed as ready-made demos with an Import button, screenshot, description, and optional preview link. The files stay in the theme and are imported in place.<\/li>\n<\/ul>\n\n<h4>1.2.16<\/h4>\n\n<ul>\n<li>The demo packs table now looks like the Backups table: left-aligned columns, a Created by column, and the same Download and Delete buttons with icons.<\/li>\n<\/ul>\n\n<h4>1.2.15<\/h4>\n\n<ul>\n<li>Backup and demo times now show in your computer's own time zone, with the zone name.<\/li>\n<\/ul>\n\n<h4>1.2.14<\/h4>\n\n<ul>\n<li>Fix \"%\" being exported as a long code, which showed up as \"100{\u2026}\" in counters and broke permalinks and URL-encoded links. Backups made with earlier versions are repaired while they are imported, so they do not need to be exported again.<\/li>\n<li>Fix tables from MariaDB servers that use long unique keys (\"USING HASH\") not being created on MySQL. Such a table is now created on InnoDB, so its rows are no longer lost.<\/li>\n<li>Replace the old domain in columns that hold only a host name, such as domain mapping tables.<\/li>\n<li>Delete cached transients after an import, so no cached menus or domain lists from the exported site remain.<\/li>\n<\/ul>\n\n<h4>1.2.13<\/h4>\n\n<ul>\n<li>Import runs in these steps: restore files into wp-content, restore mu-plugins, restore the database, then activate the exported site's plugins and theme.<\/li>\n<li>Files are restored straight from the .zip into wp-content, without a temporary copy. This plugin's own folder, drop-ins (such as object-cache.php and db.php) and host-specific mu-plugins are skipped.<\/li>\n<li>While the database is restored only this plugin is active. At the end the exported plugins are added when their files exist, and the theme options are set without switching themes, so widgets and menus stay as exported.<\/li>\n<li>After each database batch this site's home and siteurl are set again. Plugins that break login or force SSL are turned off, as before.<\/li>\n<li>The users, passwords and roles from the exported site are no longer changed. Log in with an account from the exported site after an import.<\/li>\n<li>Removed the runtime URL filters, wp-config and .htaccess changes, and the automatic login link. URLs are replaced only in the database while it is restored.<\/li>\n<li>Exports no longer include the root .htaccess and robots.txt, which belong to the server.<\/li>\n<li>Export reads each table in primary-key order, so rows are not skipped or repeated between batches, and repairs a table the server reports as crashed.<\/li>\n<\/ul>\n\n<h4>1.2.12<\/h4>\n\n<ul>\n<li>Fix imports stalling at \"Restoring database\" with \"Previous step still running\" and \"One or more database tables are unavailable\". Each restore request now commits its own transaction, so rows, the step lock and progress are no longer lost when a request ends.<\/li>\n<li>Restore the options table into a side table and swap it in with one rename, so siteurl is always readable while the database is restored.<\/li>\n<li>Use a file lock for import steps, released automatically if a request dies. Read progress from the job file.<\/li>\n<li>Run database restore by time instead of a few statements per request, which makes large sites much faster.<\/li>\n<li>Fix URL replacement for values that end in a backslash, which could break the whole row.<\/li>\n<li>Map MySQL 8 collations when the destination server does not support them.<\/li>\n<li>Do not add the operator account while the users table is being restored.<\/li>\n<\/ul>\n\n<h4>1.2.11<\/h4>\n\n<ul>\n<li>Release the import fix that keeps siteurl in place between restore steps.<\/li>\n<\/ul>\n\n<h4>1.2.10<\/h4>\n\n<ul>\n<li>Keep siteurl in the database before an import request ends, so WordPress can load the next restore step. Hold the step lock while that request is still working.<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Export the database as one SQL statement per line, with the table prefix replaced in table names, option names, and user meta keys, and commit every 1000 rows. Import reads those statements the same way. The backup file stays a .zip.<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Use the same URL replacement list during SQL import (site and home, www, schemes, encoded forms, domain\/path pairs, email domains, and the content folder). Turn off the same redirect plugins afterward. Copy files unchanged and leave wp-config, the root htaccess, and permalinks as restored.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Rewrite URLs, domain and path pairs, email domains, and the content folder path inside each SQL statement (plain, encoded, and JSON-escaped). Then set home and siteurl and activate the theme and plugins. Stop the later content pass that changed the homepage.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Rewrite URLs inside each SQL statement during import (plain, www, http\/https, and JSON-escaped), then set home\/siteurl to this site. Stop the extra text pass that broke homepage builder data.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Rewrite footer and homepage builder JSON (Elementor) by decoding it first, so those links use the new site and the homepage JSON is not broken. Keep login on this site when home\/siteurl still point at the export URL.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Rewrite exported URLs to the destination site inside SQL and again on pages, excerpts, GUIDs, and menus so links and login stay on the new site.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Keep URL\/redirect guards active until content is swept; paginate the final URL sweep (no 300-row cap); sync wp-config URL constants at finish; fall back to destination theme if the manifest lacks one.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fix post-import redirects to the old site and missing CSS: keep destination home\/siteurl during SQL restore, always rewrite URLs even when serialized data cannot be unserialized, replace content filesystem paths, and force a full destination URL + rewrite-rules repair at finish.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix export \u201cUnknown export step\u201d caused by overlapping finish retries; restore the previous export step loop.<\/li>\n<li>User-facing copy: say \u201cexported\u201d instead of \u201cdumped\u201d.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>More reliable export\/import: rewrite URLs inside SQL with safe mysql escape (strtr), omit active_plugins\/theme from the SQL export (apply from manifest at finish), unlimited PHP time limit per step, and a 3s status poll so the UI keeps updating if a request drops.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Fix restore \u201cConnection dropped\u201d loops: stop extracting into live wp-content during AJAX (that broke the next request), build the copy map while extracting, and never client-abort import requests.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Restore\/import overhaul: extract files straight into WordPress (no temp extract\u2192copy pass), shorter DB steps, and a longer client timeout so restores stop stalling on \u201cConnection dropped\u201d.<\/li>\n<li>Export unchanged \u2014 still fast; host-side backup folders stay excluded from new archives.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Shorter SQL\/file steps, step lock so retries do not overlap, 35s client abort + auto-retry, and no heavy URL repair mid-database restore.<\/li>\n<li>Split \u201cprepare file list\u201d into its own step; cap SQL statements per request; commit each query so killed requests do not roll back progress.<\/li>\n<li>Exclude host-side backup storage (<code>uploads\/Siternet Backup\/<\/code>, etc.) from new exports so old .zip archives are not nested inside the next backup.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Stop inserting WP_HOME \/ WP_SITEURL into wp-config.php (only update those constants if they already exist).<\/li>\n<li>Fix bare host replace that turned www.example.com into www.www.example.com and broke admin CSS\/images.<\/li>\n<li>On load, automatically strip corrupted www.www.* URL constants from wp-config and override them for the current request.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Add Demos tab: selectively export\/import images, menus, pages, posts, WooCommerce (products, settings, orders), users, or a full theme demo pack \u2014 without wiping the whole site.<\/li>\n<li>Speed up export: store files in the zip without Deflate (much faster packing), larger DB\/file batches, resume the file list by byte offset, and keep exporting multiple tables per AJAX step.<\/li>\n<li>Keep you logged in during export: short per-request windows (avoids host gateway timeouts), job-secret step auth if the cookie flickers, session heartbeat, durable auto-retry for huge sites, and refresh admin cookies + nonce on every step.<\/li>\n<li>Scale to multi\u2011GB backups: steal stale step locks after timeouts, reserve time for zip close, use system <code>zip -0 -g<\/code> when available for faster appends, and check free disk space.<\/li>\n<li>Faster large-site import: exclude theme\/plugins from SQL (restore from manifest), prioritized post-SQL URL sweep, leaner finish, and drop runtime URL filters once home\/siteurl are permanently correct.<\/li>\n<\/ul>\n\n<h4>1.0.30<\/h4>\n\n<ul>\n<li>Improve import reliability: rewrite old\u2192new URLs during SQL import (serialized-safe), restore destination home\/siteurl after every DB chunk, store internal site\/home URLs in the export manifest, and stop re-running full URL repair on every import AJAX step.<\/li>\n<\/ul>\n\n<h4>1.0.29<\/h4>\n\n<ul>\n<li>Fix WordPress.org theme\/plugin directory broken after import (do not rewrite api.wordpress.org URLs).<\/li>\n<\/ul>\n\n<h4>1.0.28<\/h4>\n\n<ul>\n<li>Preserve all imported user passwords and profile data (no longer overwrite the admin password after migrate).<\/li>\n<li>Fix Log Out and other login links still pointing at the old domain (filter logout_url \/ lostpassword_url \/ register_url \/ set_url_scheme).<\/li>\n<\/ul>\n\n<h4>1.0.27<\/h4>\n\n<ul>\n<li>Fix Add Plugin \/ Add Theme and other admin links still pointing at the old domain: always rewrite site\/home\/admin URLs to the current browser host and permanently correct home\/siteurl (and wp-config) on admin load when they disagree.<\/li>\n<\/ul>\n\n<h4>1.0.26<\/h4>\n\n<ul>\n<li>Fix admin\/plugin\/theme install redirects to the old domain after migration: capture destination home\/siteurl before DB import, force-write them with update_option after restore, deactivate SSL\/hide-login plugins that redirect away, harden wp-config host rewrites, and keep content\/plugins URL filters on the destination host.<\/li>\n<\/ul>\n\n<h4>1.0.25<\/h4>\n\n<ul>\n<li>Make the review banner yellow styling reliable across hosts (inline critical CSS + stronger selectors so it is not lost to cache or conflicts).<\/li>\n<\/ul>\n\n<h4>1.0.24<\/h4>\n\n<ul>\n<li>After import\/restore, show an Open Permalinks button and tip to click Save Changes (helps fix 404s after migration).<\/li>\n<\/ul>\n\n<h4>1.0.23<\/h4>\n\n<ul>\n<li>Add WordPress.org star-rating \/ review prompts (Document tab, footer link, and a dismissible banner after successful export or import).<\/li>\n<\/ul>\n\n<h4>1.0.22<\/h4>\n\n<ul>\n<li>Speed up export\/import with larger batches, longer per-request work time, and adaptive pacing (faster on healthy hosts, smaller batches after timeouts).<\/li>\n<li>Stop running heavy URL repair sweeps during migration AJAX requests (that was slowing every step).<\/li>\n<\/ul>\n\n<h4>1.0.21<\/h4>\n\n<ul>\n<li>Fix redirects to the old domain after import (login, plugin install, admin links) by pinning the destination URL and overriding home\/siteurl the same way major migration tools do.<\/li>\n<li>Remove the View site button from the post-import success panel (it could still open the old domain).<\/li>\n<\/ul>\n\n<h4>1.0.20<\/h4>\n\n<ul>\n<li>Show a clear success panel after import\/restore with Open dashboard, View site, and Refresh this page buttons instead of auto-redirecting silently.<\/li>\n<\/ul>\n\n<h4>1.0.19<\/h4>\n\n<ul>\n<li>Fix wp-login.php and wp-admin redirecting to the old domain when WP_HOME or the database still reference the source host.<\/li>\n<li>Prefer the current request host for URL repair after migration instead of trusting imported wp-config constants.<\/li>\n<\/ul>\n\n<h4>1.0.18<\/h4>\n\n<ul>\n<li>Fix permalink structure being corrupted to random hash strings after import (e.g. <code>\/%postname%\/<\/code> becoming <code>\/{hash}postname{hash}\/<\/code>).<\/li>\n<li>Store permalink settings in the export manifest and restore them after all URL updates finish.<\/li>\n<li>Repair percent placeholders in permalink options and skip URL replacement on permalink tag strings.<\/li>\n<\/ul>\n\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>Keep the operator logged in after restore: refresh auth cookies during import and issue a one-time secure dashboard login link when import finishes.<\/li>\n<li>Redirect to wp-admin automatically after import\/restore instead of requiring a manual login.<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>Fix fatal infinite loop in login_url filter that could crash PHP and make wp-login.php return 502.<\/li>\n<li>Sweep posts and postmeta for leftover old-domain image and content URLs after import.<\/li>\n<li>Remove absolute upload_url_path values that point at the old site.<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Fix post-login redirects when the login form still submits an old redirect_to URL from the imported site.<\/li>\n<li>Sanitize redirect_to on login POST before WordPress handles authentication.<\/li>\n<\/ul>","raw_excerpt":"Backup, migrate, and clone WordPress sites with unlimited .zip export, drag-and-drop import, automatic URL updates, and selective theme demo packs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358846"}],"author":[{"embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/siternet"}],"wp:attachment":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358846"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358846"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358846"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358846"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358846"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}