Description
Migrator for Elementor copies hand-picked Elementor content from one of your WordPress sites (for
example a staging site) to another one of your sites (for example production). The same plugin is
installed on both sites.
The destination PULLS. The source only makes pages available; the destination’s administrator
lists them on the destination, approves them, and only then does the destination read and import
them. Nothing is pushed to the destination and nothing is stored there before that approval.
Each page is imported with everything it needs: its media, the Elementor templates it uses (nested
templates included), the global colors and fonts it relies on, its parent page, and the IDs it
references are rewritten to the matching objects of the destination.
How it works
- On the SOURCE site open Migrator for Elementor, choose Source site and click
Generate connection key. - On the DESTINATION site open Migrator for Elementor, choose Destination site, enter the
source URL and the key on Source & options, Save, then Test Connection. - On the source Pages tab (or Templates tab) select items and click Send to destination
(or Send on one row). They are only made available: the Sent to destination tab lists
them, and you can withdraw them. - On the destination, the administrator opens Incoming changes. The list is read live from the
source. They select items and click Approve and import selected (or Reject selected). - The destination then imports the approved items (and the templates, media, Site Settings and
parent pages they need), with overall and per-item progress, Pause, Resume, Cancel, Retry and
Retry Media. Progress is saved after every step. The source’s Sent to destination tab shows
each item as imported, failed or rejected. - Optional: tick Auto Sync on a page or template on the source. Saving it in Elementor makes it
available again; it is still imported only when the destination’s administrator approves it.
Approval and security
- The source never sends anything on its own and cannot change the destination. It answers signed,
read-only requests from the destination, and only for the items its administrator made
available (plus the templates, media, Site Settings and parent pages they use). - The destination stores nothing from the source before its administrator approves. The import
then runs in that administrator’s own session (wp-admin, nonce, manage_options). - No request is ever run as a user of the other site, and the connection key cannot be used to
log in. Requests are signed with HMAC-SHA256 and a single-use nonce, valid 5 minutes, and the
key is bound to one destination.
What is imported
- Page / post fields: title, slug, content, excerpt, status, password, parent page (an Elementor
parent missing on the destination is imported first), author (matched by login / e-mail),
dates, menu order, page template, featured image, terms (missing terms are created). - All Elementor data and meta. Elementor meta removed on the source is removed on the destination.
- Theme / SEO / ACF post meta, per the source’s options: Astra, OceanWP, GeneratePress, Kadence,
Yoast, Rank Math, ACF values, plus custom keys. - References by ID, rewritten to the destination objects: templates (shortcode, Template / Loop
widgets, global widgets, popups), posts and products (query controls, dynamic tags, ?page_id=
links, Contact Form 7 / WPForms / WooCommerce shortcodes), terms, users, menus, media (galleries,
Elementor 4 image controls, ACF image fields), Theme Builder and popup display conditions.
A referenced object missing on the destination is reported and the reference is cleared, never
left pointing to another object. - Media: absolute, relative and CDN upload URLs. Files are deduplicated (also files uploaded by hand
on both sites); a file replaced on the source is imported again; large files are read in parts. - Elementor templates of every type, the Site Settings (global colors and fonts are added
automatically when a page needs them), Elementor Pro custom fonts and custom code, and every
post type edited with Elementor.
Before an item is imported, the destination checks: Elementor version, Flexbox Containers / Nested
Elements features, widgets (Elementor Pro and add-ons), page template, ACF fields, shortcodes.
Blocking problems stop the item (option), the others are listed as warnings.
Two import modes (destination, Source & options):
- Best effort (default): every approved item is imported as completely as possible. The page on
the destination is overwritten (also one with the same slug that this plugin did not create),
files the destination refuses or that cannot be read are skipped, a template that fails does not
block the page, and every problem is listed as a warning. - Restricted: choose the situations that stop an item (nothing is written): same slug not created
by the plugin, local copy edited, refused file type, media not imported, failed template / Site
Settings / parent page, missing Elementor widgets / features / version.
Deletions are never offered automatically: on the source, a page in the trash can be offered as a
“move to trash” request, which the destination’s administrator approves like any other change.
Pages moved to a new path get a 301 redirect on the destination.
Trademarks
Elementor is a trademark of Elementor Ltd. This plugin is an independent project; it is not
affiliated with, endorsed by or sponsored by Elementor Ltd.
External services
This plugin does not use any third-party service, does not track users and sends no data to the
plugin author.
It only connects two WordPress sites that you own and configure yourself, both running this
plugin: the destination reads from the “Source URL” entered on its Source & options tab, with the
connection key generated on that source.
- What is transferred, and when: only when the destination’s administrator opens Incoming changes
(the list of items made available) and approves items (their content and settings, the media files
they use, the post meta chosen in the source’s options), plus the result reported back to the
source (imported / failed / rejected, the destination’s URLs of the imported page). - How: signed HTTPS requests from the destination to the source (HMAC-SHA256 with the connection
key, single-use nonce). The connection key itself is never transmitted. - Who receives it: only your own destination site. Its terms and privacy policy are your own.
Nothing is transferred until both sites are configured and the destination’s administrator acts.
Privacy
On the source site the plugin stores the connection key (and the destination bound to it), its
options, the list of items made available with the destination’s answers, and the last import date
of each page. On the destination site it stores the source URL and connection key, its options, the
progress of an approved import and, on each imported post or media, the identifier of its source
(used to update it instead of duplicating it). It does not collect personal data. Page content may
contain personal data you entered yourself; it is copied to your own destination site only.
Limitations
- Content without Elementor (WooCommerce products, posts not built with Elementor, ACF field groups,
Gravity Forms forms) is not imported: references to it are matched by slug, so it must exist on the destination. - Elementor Pro custom icon sets are not imported.
- The source must be reachable from the destination (a staging site behind a login wall or HTTP
authentication must let the destination’s requests through). - An approved import continues in the background through WP-Cron when the screen is closed.
Installation
- Install and activate Elementor and Migrator for Elementor on both sites (Plugins > Add New, or upload the ZIP).
- Follow the steps of “How it works” above.
Requirements: Elementor active on both sites (and the same Pro widgets / add-ons if the pages use
them), the source reachable over HTTP(S) from the destination, both servers’ clocks within 5 minutes.
FAQ
-
Does it send my content to an external service?
-
No. Content only goes from your source site to your destination site, read by the destination.
-
Can the source site change my destination site?
-
No. The source cannot send anything: the destination reads from it, and only after its own
administrator approved the items. The connection key cannot be used to log in or to act as a user. -
Will it overwrite an existing page on the destination?
-
Only if the destination’s administrator approves it. In the default “Best effort” mode the page
imported earlier by the plugin, or else the page with the same slug, is then updated. Choose
“Restricted” and tick “a page or template with the same slug exists…” to stop instead of
overwriting a page the plugin did not create. -
Why is an SVG or font file skipped?
-
WordPress refuses these file types by default. Enable “Accept SVG, JSON and font files” on the
destination (Source & options tab); SVG files are then sanitized with the Elementor sanitizer. -
My source is on localhost or a private network
-
Requests use wp_safe_remote_post(), which refuses private addresses. On the destination, allow them with:
add_filter( ‘migfe_allow_unsafe_urls’, ‘__return_true’ ); -
What happens to my data if I delete the plugin?
-
Settings, progress and import dates are removed. The source identifier stored on imported posts
and media is kept, so a later reinstallation updates the same pages instead of duplicating them.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Migrator for Elementor” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Migrator for Elementor” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.0
- First public release.
- Pull model: the source makes pages available; the destination’s administrator lists them, approves
or rejects them, and only then does the destination read and import them. Nothing is pushed to
the destination or stored there before approval. - Signed, read-only source endpoints (HMAC-SHA256, single-use nonce, key bound to one destination,
key never transmitted); no request runs as a user of the other site. - Site role (source or destination) chosen once; each role shows only its own tabs and settings.
- Source: Pages tab (filters, Last Sync date and status, selection, Send to destination), Templates
tab (Elementor templates, Site Settings, Elementor Pro custom fonts and custom code), Sent to
destination tab (status of each item, withdraw, trash requests), Auto Sync per page or template. - Destination: Incoming changes tab (live list, approve / reject selected, resumable import with
Pause, Resume, Cancel, Retry and Retry Media), import options. - Automatic dependencies: templates (recursive), Site Settings global colors / fonts, parent pages.
- Generic remapping of references by ID: templates, posts, products, terms, users, menus, media,
dynamic tags, query controls, shortcodes, Theme Builder and popup display conditions. - Page fields, parent page, password, author, terms, featured image, and theme / SEO / ACF post meta.
- Media: absolute, relative and CDN URLs, deduplication by hash, replaced files imported again,
large files read in parts, optional SVG / JSON / font support with SVG sanitization. - Requirement checks: Elementor version, Flexbox Containers / Nested Elements, widgets, page
template, ACF fields, shortcodes. Two modes: “Best effort” (default) and “Restricted”. - 301 redirects for pages moved to a new path.
- Uninstall removes settings and working data.
