42Works Multisite CPT Migrator

Description

For WordPress Multisite networks: copy a post from one subsite to another while keeping everything intact.

This plugin is built for sites with rich content models — 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.

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.

What gets copied

  • Standard post fields (title, content, excerpt, date, menu order, slug, comment/ping status, password)
  • Images and files embedded in the post content and in ACF WYSIWYG/textarea/text/url fields — block editor image, cover, gallery, file, video, audio and media-text blocks, classic <img> tags, [gallery] and [caption] shortcodes, and any source upload URL; IDs and URLs (every image size) are rewritten to the target copies
  • All other post meta (SEO plugins, page builders, custom meta), with source media URLs rewritten
  • Media that already exists in the target media library (same file) is reused instead of duplicated; new uploads are attached to the cloned post
  • Featured image — re-uploaded into the target site’s media library
  • All ACF field values, including deeply nested repeaters, groups, and flexible content
  • Image, file, and gallery attachments — re-uploaded; never linked across sites
  • post_object, relationship, and page_link references — re-resolved by slug and post type on the target
  • Page parent — re-resolved by slug
  • Taxonomy terms — matched by slug; missing terms are auto-created

What gets flagged

A yellow notice on the cloned draft lists anything that needs human review:

  • Images that failed to copy re-upload manually
  • References to posts that don’t exist on the target pick the right one
  • Page parent that doesn’t exist on the target set manually if needed
  • Taxonomy terms that had to be auto-created verify or merge
  • ACF field-group drift (fields on the source that don’t exist on the target)

The panel disappears automatically the first time the post is published, or can be dismissed manually.

Requires WordPress Multisite and Advanced Custom Fields Pro (repeater, gallery, and flexible content are Pro-only field types).

Screenshots

Installation

  1. Upload the 42works-multisite-cpt-migrator folder to /wp-content/plugins/, or install via the Network Admin Plugins Add New uploader.
  2. Network Admin Plugins Network Activate.
  3. Go to Network Admin Settings MultiSite Post Cloner and tick the post types that should be clonable across subsites.
  4. On any subsite, open the list for an enabled post type. Each row gets a new “Copy to location…” action — click it and choose a target subsite.
  5. To copy several posts at once, tick them in the list, choose “Copy to location…” 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.

FAQ

Does this work on single-site WordPress?

No. The plugin requires Multisite — its whole job is moving content between subsites in the same network.

What gets copied?

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).

Why are some fields empty after copying?

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.

Does this work with Gutenberg and the Classic Editor?

Yes, both. The warning panel renders in either editor.

Does this require ACF Pro?

Yes. The plugin’s value comes from walking deeply nested field structures, and repeater, flexible_content, and gallery are ACF Pro-only field types. ACF free does not provide the structures the cloner is built around.

Can I undo a copy?

Each copy is an independent draft on the target subsite. To undo, just delete the draft. The plugin never modifies or deletes anything else — the source post is untouched and there is no two-way sync.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“42Works Multisite CPT Migrator” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

0.3.0

  • Bulk copy: “Copy to location…” in the Bulk actions dropdown for every enabled post type.
  • Bulk picker page lists the selected posts (deselect any before starting) with a single target-subsite dropdown.
  • Posts are copied one per AJAX request, sequentially, with per-row status, edit-draft links, and warning counts — avoids request timeouts and one failure never stops the rest.
  • 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.
  • 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.
  • 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: mspc_extend_field_group_locations.
  • Values for fields whose group doesn’t exist on the target are still written using the source definition. Filter: mspc_write_missing_fields.

0.2.0

  • Configurable per-network list of post types eligible for cloning, at Network Admin Settings MultiSite Post Cloner.
  • Dynamic ACF field-group discovery — no hard-coded group keys.
  • Support for post_object, relationship, and page_link reference fields, with conservative slug + post-type matching.
  • Page parent and _wp_page_template carried to the target.
  • Field-group drift detection.
  • Taxonomy auto-create reporting.
  • Persistent warning panel on the cloned draft listing anything that needs review before publishing.
  • WP-CLI: wp mspc copy <source_id> --to=<blog_id>.