{"id":288901,"date":"2026-03-31T20:46:40","date_gmt":"2026-03-31T20:46:40","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/simple-post-migrator\/"},"modified":"2026-04-02T15:47:36","modified_gmt":"2026-04-02T15:47:36","slug":"pro-services-post-migrator","status":"publish","type":"plugin","link":"https:\/\/lmo.wordpress.org\/plugins\/pro-services-post-migrator\/","author":15602155,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.2","stable_tag":"1.0.2","tested":"7.0","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"Pro Services Post Migrator","header_author":"Marcus Burnette","header_description":"Migrate WordPress posts between sites with ZIP packages or direct REST transfers, including media and taxonomy handling.","assets_banners_color":"","last_updated":"2026-04-02 15:47:36","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/mburnette.com","header_plugin_uri":"","header_author_uri":"https:\/\/mburnette.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":52,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"mdburnette","date":"2026-04-02 15:47:36"}},"upgrade_notice":{"1.0.2":"<p>Recommended update for plugin-directory naming compliance and legacy-data migration support.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3497571,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3497571,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[84,4155,166,259291],"plugin_category":[50,59],"plugin_contributors":[209348],"plugin_business_model":[],"class_list":["post-288901","plugin","type-plugin","status-publish","hentry","plugin_tags-media","plugin_tags-migration","plugin_tags-posts","plugin_tags-proserv","plugin_category-media","plugin_category-utilities-and-tools","plugin_contributors-mdburnette","plugin_committers-mdburnette"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pro-services-post-migrator\/assets\/icon-128x128.png?rev=3497571","icon_2x":"https:\/\/ps.w.org\/pro-services-post-migrator\/assets\/icon-256x256.png?rev=3497571","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Pro Services Post Migrator helps teams move post content between WordPress sites without the usual migration friction.<\/p>\n\n<p>Choose the workflow that fits your project:<\/p>\n\n<ul>\n<li>Export\/Import package workflow for controlled handoffs between environments.<\/li>\n<li>Direct site-to-site workflow over WordPress REST API using a secure connection key.<\/li>\n<\/ul>\n\n<p>Built for reliability in real migrations:<\/p>\n\n<ul>\n<li>Batch processing for better performance on large content sets.<\/li>\n<li>Re-runnable imports with mapping tables to skip already migrated posts and media.<\/li>\n<li>Referenced media migration with URL and ID rewrites in post content and meta.<\/li>\n<li>Taxonomy migration for categories, tags, and custom taxonomies (with omit controls).<\/li>\n<li>Missing author handling with saved assignment\/create preferences.<\/li>\n<li>Detailed migration logs for troubleshooting and reporting.<\/li>\n<\/ul>\n\n<p>Scope notes:<\/p>\n\n<ul>\n<li>Migrates the built-in <code>post<\/code> post type.<\/li>\n<li>Supports post statuses: <code>publish<\/code>, <code>future<\/code>, <code>draft<\/code>, <code>pending<\/code>, <code>private<\/code>, <code>trash<\/code>.<\/li>\n<li>Designed for single-site WordPress installs (multisite is not supported).<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install it through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Open \"Pro Services Post Migrator\" in wp-admin.<\/li>\n<li>On the source site, generate a connection key or create an export package.<\/li>\n<li>On the destination site, choose your migration method and run the import.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20content%20does%20this%20plugin%20migrate%3F\"><h3>What content does this plugin migrate?<\/h3><\/dt>\n<dd><p>It migrates WordPress posts (<code>post<\/code>), including supported statuses, post meta, assigned taxonomies, featured images, and referenced media.<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20custom%20post%20types%3F\"><h3>Can I migrate custom post types?<\/h3><\/dt>\n<dd><p>Not in this version. The plugin is intentionally focused on <code>post<\/code> content.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20multisite%3F\"><h3>Does this work with multisite?<\/h3><\/dt>\n<dd><p>No. This plugin supports single-site WordPress installs only.<\/p><\/dd>\n<dt id=\"is%20direct%20migration%20secure%3F\"><h3>Is direct migration secure?<\/h3><\/dt>\n<dd><p>Direct migration uses a source-generated connection key sent in request headers. You should run migrations over HTTPS.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Renamed the plugin slug, text domain, filenames, and internal prefixes to <code>pro-services-post-migrator<\/code> \/ <code>pspm_<\/code>.<\/li>\n<li>Removed the invalid <code>Plugin URI<\/code> header.<\/li>\n<li>Updated the contributor list to match the WordPress.org plugin owner username.<\/li>\n<li>Added compatibility migration for legacy <code>spm_*<\/code> options, tables, and saved local storage values.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added WordPress.org repository readme metadata and improved marketing description.<\/li>\n<li>Added plugin header fields for license, URI, and text domain metadata.<\/li>\n<li>Fixed an import package bug that referenced undefined variables during option updates.<\/li>\n<li>Hardened package path validation and direct source URL validation.<\/li>\n<li>Improved sanitization\/unslashing for export download request parameters.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Move WordPress posts between sites faster with reliable ZIP or direct REST migrations, smart author mapping, and built-in media + taxonomy support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/288901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=288901"}],"author":[{"embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mdburnette"}],"wp:attachment":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=288901"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=288901"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=288901"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=288901"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=288901"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=288901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}