Ghost Migrator: The easy way to migrate data to Ghost
The official Ghost plugin allows you to export your WordPress data in a JSON format that can be imported quickly and easily by the Ghost publishing platform.
The Ghost Migrator plugin will export as much blog and publication data as it can into a clean set of exported files.
- Posts, pages, tags and authors are all automatically exported and recreated for Ghost
- Tags will be migrated, but not categories. If needed you can convert your categories to tags before exporting.
- Ghost does not have built-in comments, but it does integrate with many comment platforms if you want to migrate your comments there.
- No custom fields, meta, shortcodes, post types, taxonomies or binary files will be migrated. Just regular posts, pages, tags and images
- Passwords are not migrated – after importing to Ghost, each user may perform a password reset to gain access to their Ghost account
Docs & Support
You can find docs, FAQ and more detailed information about Ghost on ghost.org. If you’re unable to find the answer to your question in our FAQ or in any of the documentation, try searching the Ghost support forum – if you still don’t find the answer you need, post a new topic!
Bug reports for the Ghost Migrator plugin are welcome over on our GitHub repository. Please note that GitHub is not a support forum, and that issues that aren’t properly qualified as bugs will be closed.
For more information about Ghost and help getting started with the platform, check out:
- The Ghost official homepage
- The Ghost Support & FAQ
- The Ghost Forum & Community
- Follow Ghost on Twitter
- Use the Add New Plugin in the WordPress admin area
- Activate the plugin through the ‘Plugins’ menu in WordPress
- Access the exporter functionality under
Tools -> Export to Ghost
How do I use this?
Install it, then go to Tools -> Export to Ghost.
བྱས་རྗེས་འཇོག་མཁན། & གསར་འབྱེད་པ།
“Ghost” is open source software. The following people have contributed to this plugin.བྱས་རྗེས་འཇོག་མཁན།
ཁྱེད་ཀྱི་སྐད་ཡིག་ནང་ལ་ “Ghost” ཡིག་སྒྱུར་བྱོས།
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
- Use slug as user name if no display_name exists
- Add #wordpress tag to all posts & pages
- Test & ensure compatibility with WorePress 6.1
- Test & ensure compatibility with PHP 8.1
- Fix date format for compatibility with PHP 7
- Test & ensure compatibility with WorePress 6.0
- Test & ensure compatibility with Ghost 5.0
meta_descriptionvalues where available
- Use the
user_loginvalue for user slugs to match the value used in URLs
- Remove the
languagevalues for posts, as these are not used by Ghost when importing content
- Include media library size in diagnostics
- Various bug fixes & code improvements
- Only export users with the capability to create posts – PaulAdamDavis
- Include user roles in JSON export – PaulAdamDavis
- Use ISO 8601 dates for better Ghost compatibility – PaulAdamDavis
- Update plugin icon & screenshot – PaulAdamDavis
- Limit plugin to admin users only. Props to PaulAdamDavis.
- Updated branding. Props to PaulAdamDavis.
- UI cleanup and fix for absolute image URLs in post content. Props to PaulAdamDavis.
- Added check/notice for ZipArchive.
- Added check/notice for minimum PHP version.
- Added diagnostics section.
- Updated export format to support Ghost 2.x & 3.x
- Updated slug to use user_nicename.
- Upload/image URLs are now exported as relative paths compatible with Ghost.
- The download archive now includes all images in a Ghost compatible directory structure.
- Added user profile image, updated name to use display_name, and updated the post feature image field. Props to badrihippo.
- Added permission check for downloading the exported data. Only users allowed to do that can download it. Props tomhallam.
- Added ‘the_content’ filter around $post->content. Helps with markdown conversion and display issues
- new line tweaks: h1 and h2 will be prepended by new lines now. Previously they weren’t, and that caused problems with opening a new tag for the headers.
- set h1 and h2 to use atx method (# and ## instead of underlining with === and —)
- tweaked code block: multiple lines of code blocks are exported wrapped with ticks instead of being indented by one tab character. Code spans not changed.
- shout out to sorbolene on #ghost for taking the time to nag me about this 🙂 Thanks!
- implemented HTML to Markdown (thanks @yauh!). Ref: https://github.com/nickcernis/html2markdown/
- code lint: plugin now adheres to WordPress-Extra coding style
- added featured image to the export
- Restricting fields to fit within Ghost’s db schema (concatenating some of the fields):
- title and slug are both capped at 150 characters
- status is capped at 150 characters (although you’d only every use about 15)
- language is capped at 6 (although most are 5, like “en_GB” or 2)
- Housekeeping in the repository.
- Added support for multi-user capabilities, it now exports users, and connects posts with the users
- Now exports pages
- Exports user meta
- Moved the json file save directory to the uploads folder. Added check whether the folder is writable or not.
- Added support for
pendingWordPress post statuses (which were unhandled, and thus broke import). Ref: WP Query: Status Parameters
- Removed published_at date from draft posts
- Bumped version to current stable Ghost version
- Added Export link to plugin row display for easier access
- Changed date format in exported JSON. Previously it was microtime, which caused troubles on 32 bit PHP installs, as the maximum integer was less than current time, so exports were either in scientific notation or string. Currently using RFC2822 format (date(“r”) for the devs), which works with the importer
- Fixes a bug where future posts would crash the plugin, and you weren’t able to export
- Future posts are exported as drafts. Their published_at retains the future publish datetime though
- Updated version to 0.3.0 for semver reasons
- Left out Bond version 🙁
- Fixes a duplicate tag issue.
- Removed the export of Categories so that duplicate slugs don’t happen if there is a tag and a category with the same name.
- There was a schema change in 0.3.2 or somewhere near that. Basically the way tags work changed, thus the exporter had to be reworked.
- Fixed a typo I left in the previous version causing everything to not work… Sorry…
- Fixed a path issue that would sometimes result in empty .json files. Hat tip to Ian Wootten for the fix!
- Initial implementation
Copyright & License
Copyright (c) 2013-2022 Ghost Foundation – Released under the GNU General Public License.