{"id":321430,"date":"2026-07-03T10:05:59","date_gmt":"2026-07-03T10:05:59","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/multisite-cpt-cloner\/"},"modified":"2026-10-13T13:42:06","modified_gmt":"2026-10-13T13:42:06","slug":"42works-multisite-cpt-migrator","status":"publish","type":"plugin","link":"https:\/\/kea.wordpress.org\/plugins\/42works-multisite-cpt-migrator\/","author":23508718,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.0","stable_tag":"0.3.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"42Works Multisite CPT Migrator","header_author":"42Works","header_description":"Copy a post \u2014 any CPT, with ACF values, attachments, references, and taxonomies \u2014 between WordPress Multisite subsites as a fresh draft.","assets_banners_color":"403d3c","last_updated":"2026-10-13 13:42:06","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/42works.net","header_plugin_uri":"https:\/\/42works.net","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":377,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"42works","date":"2026-08-20 07:24:31","revision":3656110},"0.3.0":{"tag":"0.3.0","author":"42works","date":"2026-10-13 13:42:06","revision":3744071}},"upgrade_notice":{"0.3.0":"<p>Adds bulk copy of multiple posts from the post list.<\/p>","0.2.0":"<p>Initial public release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3595059,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3595059,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.0","0.3.0"],"block_files":[],"assets_screenshots":{"screenshot-2.png":{"filename":"screenshot-2.png","revision":3595059,"resolution":"2","location":"assets","locale":"","width":1421,"height":542},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3595059,"resolution":"3","location":"assets","locale":"","width":1419,"height":575},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3744093,"resolution":"4","location":"assets","locale":"","width":275,"height":378}},"screenshots":{"1":"Network Admin -&gt; Settings -&gt; MultiSite Post Cloner - checkbox list of post types eligible for cloning.","2":"The \"Copy to location\u2026\" row action on a post list.","3":"The target-subsite picker.","4":"The bulk copy page with per-post progress."}},"plugin_section":[],"plugin_tags":[2211,2814,1794,9055,441],"plugin_category":[51,59],"plugin_contributors":[269977],"plugin_business_model":[],"class_list":["post-321430","plugin","type-plugin","status-publish","hentry","plugin_tags-acf","plugin_tags-clone","plugin_tags-custom-post-type","plugin_tags-duplicate","plugin_tags-multisite","plugin_category-multisite","plugin_category-utilities-and-tools","plugin_contributors-42works","plugin_committers-42works"],"banners":{"banner":"https:\/\/ps.w.org\/42works-multisite-cpt-migrator\/assets\/banner-772x250.png?rev=3595059","banner_2x":"https:\/\/ps.w.org\/42works-multisite-cpt-migrator\/assets\/banner-1544x500.png?rev=3595059","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/42works-multisite-cpt-migrator_403d3c.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/42works-multisite-cpt-migrator\/assets\/screenshot-2.png?rev=3595059","caption":"The \"Copy to location\u2026\" row action on a post list."},{"src":"https:\/\/ps.w.org\/42works-multisite-cpt-migrator\/assets\/screenshot-3.png?rev=3595059","caption":"The target-subsite picker."},{"src":"https:\/\/ps.w.org\/42works-multisite-cpt-migrator\/assets\/screenshot-4.png?rev=3744093","caption":"The bulk copy page with per-post progress."}],"raw_content":"<!--section=description-->\n<p>For WordPress Multisite networks: copy a post from one subsite to another while keeping everything intact.<\/p>\n\n<p>This plugin is built for sites with rich content models \u2014 custom post types backed by Advanced Custom Fields, where each post can contain deeply nested repeater rows, image galleries, and links to other posts. The cloner walks all of it, re-uploads attachments into the target subsite's media library, and re-resolves post references on the target by slug.<\/p>\n\n<p>Every copy is created as a fresh draft. Existing posts on the target are never overwritten or modified. If something can't be transferred cleanly (an image fails to copy, a referenced post doesn't exist on the target, an ACF field group has drifted), the plugin flags it on the cloned draft with a yellow warning panel so the editor sees exactly what to fix before publishing.<\/p>\n\n<h4>What gets copied<\/h4>\n\n<ul>\n<li>Standard post fields (title, content, excerpt, date, menu order, slug, comment\/ping status, password)<\/li>\n<li>Images and files embedded in the post content and in ACF WYSIWYG\/textarea\/text\/url fields \u2014 block editor image, cover, gallery, file, video, audio and media-text blocks, classic <code>&lt;img&gt;<\/code> tags, <code>[gallery]<\/code> and <code>[caption]<\/code> shortcodes, and any source upload URL; IDs and URLs (every image size) are rewritten to the target copies<\/li>\n<li>All other post meta (SEO plugins, page builders, custom meta), with source media URLs rewritten<\/li>\n<li>Media that already exists in the target media library (same file) is reused instead of duplicated; new uploads are attached to the cloned post<\/li>\n<li>Featured image \u2014 re-uploaded into the target site's media library<\/li>\n<li>All ACF field values, including deeply nested repeaters, groups, and flexible content<\/li>\n<li>Image, file, and gallery attachments \u2014 re-uploaded; never linked across sites<\/li>\n<li><code>post_object<\/code>, <code>relationship<\/code>, and <code>page_link<\/code> references \u2014 re-resolved by slug and post type on the target<\/li>\n<li>Page parent \u2014 re-resolved by slug<\/li>\n<li>Taxonomy terms \u2014 matched by slug; missing terms are auto-created<\/li>\n<\/ul>\n\n<h4>What gets flagged<\/h4>\n\n<p>A yellow notice on the cloned draft lists anything that needs human review:<\/p>\n\n<ul>\n<li>Images that failed to copy \u2192 re-upload manually<\/li>\n<li>References to posts that don't exist on the target \u2192 pick the right one<\/li>\n<li>Page parent that doesn't exist on the target \u2192 set manually if needed<\/li>\n<li>Taxonomy terms that had to be auto-created \u2192 verify or merge<\/li>\n<li>ACF field-group drift (fields on the source that don't exist on the target)<\/li>\n<\/ul>\n\n<p>The panel disappears automatically the first time the post is published, or can be dismissed manually.<\/p>\n\n<p>Requires WordPress Multisite and Advanced Custom Fields Pro (repeater, gallery, and flexible content are Pro-only field types).<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>42works-multisite-cpt-migrator<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via the Network Admin \u2192 Plugins \u2192 Add New uploader.<\/li>\n<li>Network Admin \u2192 Plugins \u2192 Network Activate.<\/li>\n<li>Go to Network Admin \u2192 Settings \u2192 MultiSite Post Cloner and tick the post types that should be clonable across subsites.<\/li>\n<li>On any subsite, open the list for an enabled post type. Each row gets a new \"Copy to location\u2026\" action \u2014 click it and choose a target subsite.<\/li>\n<li>To copy several posts at once, tick them in the list, choose \"Copy to location\u2026\" from the Bulk actions dropdown, click Apply, pick a target subsite, and click \"Copy selected as drafts\". Progress and a link to each new draft are shown per post.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20on%20single-site%20wordpress%3F\"><h3>Does this work on single-site WordPress?<\/h3><\/dt>\n<dd><p>No. The plugin requires Multisite \u2014 its whole job is moving content between subsites in the same network.<\/p><\/dd>\n<dt id=\"what%20gets%20copied%3F\"><h3>What gets copied?<\/h3><\/dt>\n<dd><p>Standard post fields, the featured image, every ACF field value (including nested repeaters, groups, and flexible content), all attachments referenced from those fields (re-uploaded into the target site's media library), post references (re-resolved by slug and post type on the target), the page parent (also re-resolved by slug), and all taxonomy terms (matched by slug; missing terms are auto-created).<\/p><\/dd>\n<dt id=\"why%20are%20some%20fields%20empty%20after%20copying%3F\"><h3>Why are some fields empty after copying?<\/h3><\/dt>\n<dd><p>The plugin is intentionally conservative. If a referenced post doesn't exist on the target subsite (or matches multiple candidates), the reference is left empty and flagged on the warning panel rather than silently guessing. Same for unmatched page parents and failed image transfers. The warning panel on the cloned draft lists every item that needs your attention so nothing slips through unnoticed.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20gutenberg%20and%20the%20classic%20editor%3F\"><h3>Does this work with Gutenberg and the Classic Editor?<\/h3><\/dt>\n<dd><p>Yes, both. The warning panel renders in either editor.<\/p><\/dd>\n<dt id=\"does%20this%20require%20acf%20pro%3F\"><h3>Does this require ACF Pro?<\/h3><\/dt>\n<dd><p>Yes. The plugin's value comes from walking deeply nested field structures, and <code>repeater<\/code>, <code>flexible_content<\/code>, and <code>gallery<\/code> are ACF Pro-only field types. ACF free does not provide the structures the cloner is built around.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20a%20copy%3F\"><h3>Can I undo a copy?<\/h3><\/dt>\n<dd><p>Each copy is an independent draft on the target subsite. To undo, just delete the draft. The plugin never modifies or deletes anything else \u2014 the source post is untouched and there is no two-way sync.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Bulk copy: \"Copy to location\u2026\" in the Bulk actions dropdown for every enabled post type.<\/li>\n<li>Bulk picker page lists the selected posts (deselect any before starting) with a single target-subsite dropdown.<\/li>\n<li>Posts are copied one per AJAX request, sequentially, with per-row status, edit-draft links, and warning counts \u2014 avoids request timeouts and one failure never stops the rest.<\/li>\n<li>Fix: ACF field groups assigned by single page\/post, page template, page type, parent, taxonomy or any rule other than post type are now copied. Fields are discovered from the post itself, not only from its post type.<\/li>\n<li>Fix: target field definitions are resolved by field key (independent of location rules); the per-post-type field cache is now per-site, so field-group drift is actually detected.<\/li>\n<li>Groups located by \"Page\/Post is equal to\" get an OR rule for the new target post so the fields show in its editor (DB-stored groups). JSON\/PHP groups are flagged in the warning panel. Filter: <code>mspc_extend_field_group_locations<\/code>.<\/li>\n<li>Values for fields whose group doesn't exist on the target are still written using the source definition. Filter: <code>mspc_write_missing_fields<\/code>.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Configurable per-network list of post types eligible for cloning, at Network Admin \u2192 Settings \u2192 MultiSite Post Cloner.<\/li>\n<li>Dynamic ACF field-group discovery \u2014 no hard-coded group keys.<\/li>\n<li>Support for <code>post_object<\/code>, <code>relationship<\/code>, and <code>page_link<\/code> reference fields, with conservative slug + post-type matching.<\/li>\n<li>Page parent and <code>_wp_page_template<\/code> carried to the target.<\/li>\n<li>Field-group drift detection.<\/li>\n<li>Taxonomy auto-create reporting.<\/li>\n<li>Persistent warning panel on the cloned draft listing anything that needs review before publishing.<\/li>\n<li>WP-CLI: <code>wp mspc copy &lt;source_id&gt; --to=&lt;blog_id&gt;<\/code>.<\/li>\n<\/ul>","raw_excerpt":"Copy posts, pages, and custom post types between WordPress Multisite subsites. Supports ACF fields, galleries, and references.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321430"}],"author":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/42works"}],"wp:attachment":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321430"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321430"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321430"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321430"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321430"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}