{"id":330482,"date":"2026-07-02T17:49:54","date_gmt":"2026-07-02T17:49:54","guid":{"rendered":"https:\/\/fr.wordpress.org\/plugins\/connector-for-wpmove\/"},"modified":"2026-09-13T12:39:22","modified_gmt":"2026-09-13T12:39:22","slug":"wpmove-migration-connector","status":"publish","type":"plugin","link":"https:\/\/ja.wordpress.org\/plugins\/wpmove-migration-connector\/","author":13559231,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.9","stable_tag":"2.1.9","tested":"7.0.6","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"WPMove Migration Connector","header_author":"WPMove","header_description":"Export and import WordPress posts, pages and custom post types as a portable file \u2014 free, offline, no account required.","assets_banners_color":"4b46cc","last_updated":"2026-09-13 12:39:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpmove.app\/connector","header_author_uri":"https:\/\/wpmove.app","rating":0,"author_block_rating":0,"active_installs":0,"downloads":468,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.3":{"tag":"2.0.3","author":"xuxu.fr","date":"2026-07-02 18:51:44","revision":3594395},"2.0.4":{"tag":"2.0.4","author":"xuxu.fr","date":"2026-07-04 05:53:14","revision":3595714},"2.0.5":{"tag":"2.0.5","author":"xuxu.fr","date":"2026-07-04 09:38:42","revision":3595837},"2.1.0":{"tag":"2.1.0","author":"xuxu.fr","date":"2026-08-20 04:27:27","revision":3655751},"2.1.1":{"tag":"2.1.1","author":"xuxu.fr","date":"2026-08-20 19:50:22","revision":3657707},"2.1.2":{"tag":"2.1.2","author":"xuxu.fr","date":"2026-09-10 18:34:17","revision":3690335},"2.1.3":{"tag":"2.1.3","author":"xuxu.fr","date":"2026-09-12 11:42:53","revision":3692642},"2.1.5":{"tag":"2.1.5","author":"xuxu.fr","date":"2026-09-12 19:07:08","revision":3693042},"2.1.6":{"tag":"2.1.6","author":"xuxu.fr","date":"2026-09-12 19:47:49","revision":3693082},"2.1.7":{"tag":"2.1.7","author":"xuxu.fr","date":"2026-09-13 12:39:22","revision":3693655},"2.1.8":{"tag":"2.1.8","author":"xuxu.fr","date":"2026-09-13 12:39:22","revision":3693655},"2.1.9":{"tag":"2.1.9","author":"xuxu.fr","date":"2026-09-13 12:39:22","revision":3693655}},"upgrade_notice":{"2.1.0":"<p>This plugin now answers an authenticated endpoint so another WordPress site you control can migrate content to or from this one. It still contacts no external service on its own, and requests without a valid application password are refused.<\/p>","2.0.0":"<p>File export\/import only and contacts no external service. Direct site-to-site migration with media is now the separate WPMove Migration Connector Premium add-on from wpmove.app.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3594328,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3594328,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3594328,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3594328,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.3","2.0.4","2.0.5","2.1.0","2.1.1","2.1.2","2.1.3","2.1.5","2.1.6","2.1.7","2.1.8","2.1.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3594328,"resolution":"1","location":"assets","locale":"","width":1280,"height":940},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3594328,"resolution":"2","location":"assets","locale":"","width":1280,"height":940}},"screenshots":{"1":"Export to file: choose post types and status, then download a portable .json file. No account needed.","2":"Import from file: upload a previously exported file and add its posts. Nothing is overwritten."}},"plugin_section":[],"plugin_tags":[529,1859,87,4151,4155],"plugin_category":[59],"plugin_contributors":[171151],"plugin_business_model":[],"class_list":["post-330482","plugin","type-plugin","status-publish","hentry","plugin_tags-content","plugin_tags-export","plugin_tags-import","plugin_tags-migrate","plugin_tags-migration","plugin_category-utilities-and-tools","plugin_contributors-xuxufr","plugin_committers-xuxufr"],"banners":{"banner":"https:\/\/ps.w.org\/wpmove-migration-connector\/assets\/banner-772x250.png?rev=3594328","banner_2x":"https:\/\/ps.w.org\/wpmove-migration-connector\/assets\/banner-1544x500.png?rev=3594328","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wpmove-migration-connector\/assets\/icon-128x128.png?rev=3594328","icon_2x":"https:\/\/ps.w.org\/wpmove-migration-connector\/assets\/icon-256x256.png?rev=3594328","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wpmove-migration-connector\/assets\/screenshot-1.png?rev=3594328","caption":"Export to file: choose post types and status, then download a portable .json file. No account needed."},{"src":"https:\/\/ps.w.org\/wpmove-migration-connector\/assets\/screenshot-2.png?rev=3594328","caption":"Import from file: upload a previously exported file and add its posts. Nothing is overwritten."}],"raw_content":"<!--section=description-->\n<p>WPMove Migration Connector exports the posts, pages and custom post types of a WordPress site to a portable <code>.json<\/code> file, and imports such a file into another site. It runs entirely on your own server \u2014 no sign-up, no API key, and no external service is contacted.<\/p>\n\n<ul>\n<li><strong>Export<\/strong> the posts, pages and custom post types of this site to a portable file you download.<\/li>\n<li><p><strong>Import<\/strong> a previously exported file into another WordPress site. Imported items are <strong>added as new posts<\/strong> \u2014 nothing existing is overwritten or deleted.<\/p><\/li>\n<li><p><strong>Receive a direct migration.<\/strong> Another WordPress site you control can send content to this site, or read content from it, without any file changing hands.<\/p><\/li>\n<\/ul>\n\n<p>Text, public custom fields and taxonomy terms (categories, tags and custom taxonomies) travel with each post. An optional export setting preserves the full taxonomy structure \u2014 all terms with their descriptions and parent-child hierarchy \u2014 so the target site is ready before posts are imported. The plugin is fully functional on its own, with no account required.<\/p>\n\n<p>When it receives a direct migration, this plugin also accepts the custom fields that the REST API normally leaves behind \u2014 Elementor layouts, ACF fields, SEO metadata \u2014 which are otherwise lost in transfer. The other site does the work; this one only answers, and only to requests carrying a valid WordPress application password for an account allowed to edit the content concerned.<\/p>\n\n<h4>Need to migrate directly between two live sites, with media?<\/h4>\n\n<p>Moving content as a file is perfect for a one-off transfer. If you instead need to copy content <strong>directly between two running WordPress sites over their REST APIs<\/strong> \u2014 including media (featured images and inline files), pull\/push modes, post-by-post selection and resumable runs \u2014 there is a separate premium add-on, <strong>WPMove Migration Connector Premium<\/strong>, available from <a href=\"https:\/\/wpmove.app\/why-upgrade\/\">wpmove.app<\/a>. It pairs with a wpmove.app account and is the practical option when one of the two sites cannot be reached from the internet (localhost, a firewall, a private network). The premium add-on is optional and is <strong>not<\/strong> required to use this free plugin.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Free, offline export of posts, pages and custom post types to a portable file.<\/li>\n<li>Free import that appends content \u2014 no overwrite, no ID conflicts.<\/li>\n<li>Public custom fields and taxonomy terms included.<\/li>\n<li>Optional: export the full taxonomy structure (all terms with descriptions and parent-child hierarchy) so it is recreated correctly on import.<\/li>\n<li>No account, no API key, no external connection.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin contacts no external services. It never sends your data anywhere on its own, and requires no account.<\/p>\n\n<p>It does expose an authenticated endpoint under <code>\/wp-json\/wpmvc\/v1\/<\/code> so that another WordPress site you control can migrate content to or from this one. Any such traffic happens only between your own sites, at your initiative, and only with a valid application password.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin, then open <strong>WPMove Migration Connector<\/strong> in the admin menu.<\/li>\n<li><strong>To export:<\/strong> choose <em>Export to a file<\/em>, pick the post types, status and options, and download the file.<\/li>\n<li><strong>To import:<\/strong> choose <em>Import from a file<\/em>, select the file, and import. Items are added as new posts.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%3F\"><h3>Do I need an account?<\/h3><\/dt>\n<dd><p>No. The export and import work fully offline with no account and no API key. This plugin never contacts any external service.<\/p><\/dd>\n<dt id=\"does%20the%20import%20overwrite%20my%20existing%20content%3F\"><h3>Does the import overwrite my existing content?<\/h3><\/dt>\n<dd><p>No. The import is append-only: every item becomes a new post. Nothing on the destination site is overwritten or deleted.<\/p><\/dd>\n<dt id=\"does%20the%20export%20include%20media%3F\"><h3>Does the export include media?<\/h3><\/dt>\n<dd><p>No. The file export contains posts, pages and custom post types (text, public custom fields and taxonomy terms). Migrating media files directly between two live sites is handled by the optional premium add-on.<\/p><\/dd>\n<dt id=\"how%20do%20i%20migrate%20media%20or%20copy%20content%20directly%20between%20two%20live%20sites%3F\"><h3>How do I migrate media or copy content directly between two live sites?<\/h3><\/dt>\n<dd><p>That is what the premium add-on, WPMove Migration Connector Premium, does. It is distributed from wpmove.app and replaces this free plugin once installed.<\/p><\/dd>\n<dt id=\"is%20anything%20sent%20over%20the%20internet%3F\"><h3>Is anything sent over the internet?<\/h3><\/dt>\n<dd><p>This plugin never starts a connection of its own: it contacts no external service, and the file you export stays on your computer until you import it elsewhere yourself.<\/p>\n\n<p>It does answer one kind of incoming request. Since version 2.1.0 it exposes a migration endpoint so that another WordPress site you control can send content to this site or read content from it. Requests without a valid application password are refused.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20migration%20endpoint%3F\"><h3>Who can use the migration endpoint?<\/h3><\/dt>\n<dd><p>Only someone holding a WordPress application password for an account on this site that is allowed to edit the content concerned. Application passwords are created by you, from your own user profile, and can be revoked there at any time. Unauthenticated requests get a 401, and an account without editing rights gets a 403 \u2014 nothing is readable or writable by the public.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.9<\/h4>\n\n<ul>\n<li>New: the \"Taxonomy REST visibility\" setting becomes \"REST API visibility\" and also covers custom post types registered without REST API support \u2014 the same opt-in, per type, with the same caveat (an exposed type becomes readable through this site's public REST API).<\/li>\n<li>Fix: an item already opted in disappeared from the list at the next page load (it now had REST support), so it could never be unticked again. Opted-in items stay listed.<\/li>\n<\/ul>\n\n<h4>2.1.8<\/h4>\n\n<ul>\n<li>New: \"Taxonomy REST visibility\" setting. A custom taxonomy that a plugin or theme registered without REST API support (<code>show_in_rest<\/code>) is invisible to WPMove \u2014 this new opt-in list lets you expose one specifically, on a per-taxonomy basis. Nothing is exposed automatically.<\/li>\n<\/ul>\n\n<h4>2.1.7<\/h4>\n\n<ul>\n<li>New: the receiver endpoint gains <code>POST \/wpmvc\/v1\/comments<\/code> (announced as <code>comments.write<\/code> by <code>\/ping<\/code>). A migration driven by wpmove.app or by the Premium plugin now writes comments on this site through <code>wp_insert_comment()<\/code> instead of the core REST route \u2014 so a migrated comment is no longer treated as a new one: no moderation heuristics, no duplicate rejection, and no notification email to the post author for each comment. Administrator account required, and a parent comment must belong to the same post (the core does not check).<\/li>\n<\/ul>\n\n<h4>2.1.6<\/h4>\n\n<ul>\n<li>Security: reading meta through the receiver endpoint now requires an administrator account too (it returns every meta of a post, protected keys included).<\/li>\n<li>Fix: a post status the target does not know is imported as a draft instead of being stored as-is and hidden from every listing.<\/li>\n<\/ul>\n\n<h4>2.1.5<\/h4>\n\n<ul>\n<li>Fix: the file export\/import dropped every protected meta key (<code>_elementor_data<\/code>, <code>_wp_page_template<\/code>, \u2026): a page built with a page builder came back without its layout. Those keys now travel like in direct migrations (ID references still left out, since a file cannot remap them), with the source domain swapped inside them \u2014 JSON included.<\/li>\n<li>Fix: the file carried the post date in the source site's local time only; imported on a site in another timezone, a recently published post could turn into a scheduled one. The GMT date is now exported and used on import (older files still import with their local date).<\/li>\n<\/ul>\n\n<h4>2.1.4<\/h4>\n\n<ul>\n<li>Security: writing meta through the plugin's receiver endpoint now requires an administrator account. Any account allowed to edit a post could previously write arbitrary meta on it, protected keys included.<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>New: the file export now bundles any reusable Gutenberg block referenced by the exported items (a \"pattern\" is never itself selectable for export, but its content can be hidden inside another item's content). Import recreates those blocks and rewrites the references to point at them, instead of importing content whose blocks point at nothing on the new site.<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>Fix: another plugin's admin notice no longer lands in the middle of this page's header, splitting the title from the text below it.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Improvement: when this site is the source of a direct migration, image and gallery fields now carry enough information for the other site to attach the right file. Previously those fields could be skipped rather than risk pointing at the wrong image.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>New: this plugin can now receive a direct migration from another WordPress site you control \u2014 content is sent straight from one site to the other, with no file to download and re-upload. Crucially, the custom fields that the REST API normally drops (Elementor layouts, ACF fields, SEO metadata) now travel too, so a page arrives laid out the way it left. The other site drives the migration; this one answers, and only to requests carrying a valid application password from an account allowed to edit the content. This plugin still contacts no external service on its own.<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li>Improvement: unchecking every content type is no longer possible \u2014 at least one is always kept selected, and the server now rejects an empty selection instead of silently defaulting to Posts.<\/li>\n<li>Improvement: choosing a file to import now shows a quick preview (source site, export date, item count) before you import, with a clear message if the file isn't a recognized export.<\/li>\n<li>Improvement: items skipped during import (a type you didn't select) now appear individually in the import log, not just in the summary count.<\/li>\n<li>Smaller plugin download \u2014 removed unused CSS left over from a shared codebase with the Premium add-on.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>Fix: \"Media\" is no longer offered as a selectable content type in file export\/import. This plugin never transfers the underlying file (media migration between live sites is a premium feature), so selecting it previously created a broken media entry with no file attached on import.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>Fix: Lite plugin now activates correctly when the Premium add-on is installed but deactivated on the same site.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>New option to export the full taxonomy structure (all terms with descriptions and parent-child hierarchy). On import, terms are recreated before posts so hierarchy is preserved correctly.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Post type selector now lists all public post types registered on the site, not just Posts and Pages.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>This plugin is now file export\/import only \u2014 free, offline, with no external connection.<\/li>\n<li>Direct site-to-site migration (pull\/push) and media transfer have moved to the separate premium add-on, WPMove Migration Connector Premium, available from wpmove.app.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Import categories, tags and other taxonomy terms.<\/li>\n<li>Refined admin interface.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Free, offline file export and import of posts and pages. Imports are append-only.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Export your posts, pages and custom post types to a portable file and import them into another WordPress site, or receive a direct migration.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/330482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=330482"}],"author":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/xuxufr"}],"wp:attachment":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=330482"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=330482"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=330482"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=330482"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=330482"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=330482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}