Import Post Exists

Description

Features:

  • Update existing posts
  • Create new posts
  • Hierarchical page sync
  • ACF support
  • Polylang support
  • Taxonomy sync
  • Featured image sync
  • Auto backup before import or restore
  • Backup tab: list, download, restore and delete backup files
  • Option to import publish date (post_date) from JSON
  • Relink images inside post content to existing Media Library attachments (auto width/height/class, keeps relative src for staging-to-production imports)

Screenshots

Installation

  1. Upload plugin
  2. Activate plugin
  3. Open Tools > Import Post Exists

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Import Post Exists” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Import Post Exists” 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.9

  • Import/Restore: fix backslashes (« \ ») being removed from post meta, ACF values and term name/description (e.g. « C:\Users\file.pdf » was saved as « C:Usersfile.pdf »). WordPress unslashes these values on save, so they are now slashed first
  • Import: large files are imported in batches of 10 posts per request (with a progress counter) to avoid timeouts. Parents are still imported before children across the whole file, and Polylang translations in different batches are linked after the last batch. If a batch fails, the import stops and reports how many posts were imported
  • Import/Restore: fix nested ACF fields inside repeater/group (file, gallery, sub repeater, sub group) being saved as empty values
  • Import: fix duplicate parent placeholders for nested pages — missing parents are now created level by level at their real position (e.g. « a » then « a/b »), so sibling pages share the same placeholder
  • Import: fix Gutenberg image blocks showing « Block contains unexpected or invalid content » after import — block content now only updates the image block « id » and wp-image-{id} class to the destination attachment (no extra width/height/size-full); classic content keeps the previous behavior
  • Import: create missing taxonomy terms, including parent terms and the Polylang language from JSON. Export now writes each term as {slug, name, description, language, parent}; older JSON with slug-only terms still imports (missing terms are skipped as before)
  • Preview: new « New Terms » column listing the terms that will be created
  • Export: skip ACF relationship and post_object fields (also inside repeater/group). They store source-site post IDs that point to wrong posts on the destination, so import no longer overwrites them — values set manually on the destination are kept
  • Import/Preview: items whose post type does not exist on the destination site are marked as ERROR in Preview and skipped on import, to avoid orphan data
  • Backup: add checkboxes and « Delete selected » to delete multiple backup files at once
  • Import: post slugs now follow WordPress defaults (a duplicate slug gets « -2 »). With the Polylang Slug plugin active, the same slug is allowed across languages (checked against the JSON language, since new posts have no language yet when WordPress checks the slug). Previously the JSON slug was always forced, which without Polylang Slug broke front-end URLs and was renamed to « -2 » on the next save in wp-admin
  • Export: add « source_url » (site home URL) to each exported item
  • Export: omit empty « post_excerpt », « taxonomies », « parent », « acf » and « meta » fields for a smaller JSON (import treats missing fields as empty, same as before)
  • Import: when « source_url » differs from the destination site, replace the source site URL with the destination URL in post content, excerpt, ACF values and post meta (serialized meta is unserialized first, so string lengths stay valid) (http://, https:// and // forms; exact domain match only, e.g. « a.com » never touches « a.com.vn »). JSON files without « source_url » are imported as before
  • Import: absolute image src pointing to another site’s uploads (e.g. https://staging.example/wp-content/uploads/…) is now rewritten to the destination uploads URL when the file exists in the destination Media Library; relative src (/wp-content/uploads/…) and missing images are left unchanged
  • Export: fix PHP warning when a post’s parent no longer exists (exported as a post without parent)
  • Export: parent sync_key now uses the parent’s own Polylang language instead of the child’s
  • Export: fix « who » argument deprecated notice (WP 5.9+) in the author filter
  • Export: author filter now only lists users who have posts in the exportable post types
  • Preview: translate remaining Vietnamese UI messages (missing media, duplicate slug warning) to English
  • Code: remove unused « impoex_restore_backup » AJAX handler (the Restore button already runs through the import flow)

1.0.8

  • Export/Import: support Contact Form 7 forms (form content + Mail, Mail (2), Messages, Additional Settings)
  • Import: add « Create new posts from JSON » option to always insert new posts instead of updating/overwriting existing ones
  • Preview: show simulated « -2 » slug and skip target info when « Create new posts » is checked, to avoid confusion with overwrite
  • Export: post type dropdown now hides post types with 0 posts, and excludes trash/auto-draft from the displayed count
  • UI: replace emoji icons with Dashicons to avoid broken icons when the emoji CDN is unreachable
  • Export: omit empty « language » field when Polylang is not active on the source site
  • Import: when multiple posts share the same slug across Polylang languages and JSON has no language info, use post_title as a tie-breaker before falling back to the lowest post ID
  • Preview: warn when a JSON item matches more than one post on the destination (same slug/post_type, e.g. duplicate Polylang translations), listing all matches and which one will be updated

1.0.7

  • Preview: scan JSON for missing media (featured image, ACF image/file/gallery/repeater/group) before import, show a « Missing Media » column listing affected fields/paths
  • Preview: show loading overlay while scanning
  • Import/Restore: featured image now fully follows JSON — removes the destination’s current featured image when the JSON path doesn’t match any existing attachment, instead of silently keeping the old one
  • Import/Restore: ACF image/file fields now always overwrite with JSON data (keep the raw path as a placeholder when unresolved) instead of being skipped
  • Restore: fix ACF group fields (including nested image/repeater) not being restored from backup
  • Restore: fix ACF image/file fields not being cleared when the backup JSON has no file
  • Fix: attachment lookup by file path now orders results deterministically and excludes trashed/non-attachment posts

1.0.6

  • Import: auto-detect <img> tags in post content that match existing Media Library attachments on the destination site
  • Import: auto-fill width/height and wp-image-{id}/size-full class on matched images, matching WordPress editor output
  • Import: image src is left unchanged (exactly as in the JSON) to support staging-to-production imports across different domains/paths

1.0.4

  • Export: add post_date (publish date) to exported JSON
  • Import: add « Import publish date » option to apply post_date from JSON when creating/updating posts

1.0.3

  • Add Backup tab: list, download and restore backup files
  • Auto backup post before import or restore
  • Add check-all for import table
  • Validate JSON format on file select
  • Fix export checkbox: export selected posts only
  • Fix import metabox
  • Import with ajax

1.0.2

  • Fix import page template

1.0.1

  • Show Permalink to Page

1.0.0

  • Initial release