我一直在寻找将Ghost Blog帖子复制到Wordpress的可能性。
到目前为止,我已设法将所有ghost数据导出到JSON文件 - 您知道任何现有工具将其转换为Wordpress可导入的内容吗?
如果没有,我必须自己构建一些东西,你会建议将JSON解析为WXR文件或类似文件,或者直接导入Wordpress的DB吗?
提前致谢! ķ。
答案 0 :(得分:3)
我通过阅读Ghost JSON导出将Ghost博客迁移到Wordpress,稍微按摩它并使用wp_insert_post
导入帖子。
此代码应放在主题的functions.php文件中 - 您可以在http://example.com/ghost/debug/导出Ghost帖子(GhostData.json)。
注意:下面的示例不会导入所有数据,而是导入大多数关键字段。
/**
* A function used to programmatically create a post in WordPress.
*
* http://tommcfarlin.com/programmatically-create-a-post-in-wordpress/
*
* @returns post ID if successful
* -1 if the post was never created
* -2 if a post with the same title exists
*/
function create_wp_post ($post_details) {
// Initialize the page ID to -1. This indicates no action has been taken.
$post_id = -1;
$post = get_page_by_title($post_details['title'], 'OBJECT', 'post');
// If the page title doesn't already exist, then insert the post
if (is_null($post)) {
// Set the post ID so that we know the post was created successfully
$post_id = wp_insert_post(
array(
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_author' => $post_details['author'],
'post_content' => $post_details['content'],
'post_date' => $post_details['date'],
'post_date_gmt' => $post_details['date_gmt'],
'post_name' => $post_details['slug'],
'post_status' => $post_details['status'],
'post_title' => $post_details['title'],
'post_type' => 'post',
'tags_input' => $post_details['tags_input']
)
);
// Page title already exists, return error
} else {
$post_id = -2;
}
}
/**
* A function used to filter Ghost blog posts into Wordpress format.
*/
function filter_ghost_posts () {
$posts = json_decode(file_get_contents('GhostData.json'), true);
if ($posts) {
foreach ($posts['data']['posts'] as $post) {
$post_details = array(
'author' => $post['author_id'],
'date' => date('Y-m-d H:i:s', $post['published_at'] / 1000),
'date_gmt' => gmdate('Y-m-d H:i:s', $post['published_at'] / 1000),
'id' => $post['id'],
'content' => $post['html'],
'status' => $post['status'],
'slug' => $post['slug'],
'title' => $post['title']
);
// Status
// Fix discrepancy in naming between Ghost and Wordpress
if ($post_details['status'] === 'published') {
$post_details['status'] = 'publish';
}
// Tags
$post_tags_list = [];
foreach ($posts['data']['posts_tags'] as $post_tags) {
if ($post['id'] === $post_tags['post_id']) {
$post_tags_id = $post_tags['tag_id'];
array_push($post_tags_list, $posts['data']['tags'][$post_tags_id]['name']);
}
}
if (count($post_tags_list) > 0) {
$post_details['tags_input'] = implode(',', $post_tags_list);
}
$post_id = create_wp_post($post_details);
if ($post_id == -1 || $post_id == -2) {
// Error handling here
}
}
}
}
add_filter('after_setup_theme', 'filter_ghost_posts');
答案 1 :(得分:2)
我的建议是使用Google Refine导入JSON,然后导出CSV,然后使用WP Ultimate CSV Importer Plugin将其导入WordPress网站。希望这可以帮助。
答案 2 :(得分:0)
这个问题已经过时了,但截至2017年,我仍然无法找到Ghost>的解决方案。 WP发布迁移。我做的是:
将一些JSON字段(如title,markdown ...)更改为post_title和post_content等(WP post字段列表在此处为https://codex.wordpress.org/Class_Reference/WP_Post),并删除一些不需要的字段,如update_at或者放大器我留下的是:
ID
POST_TITLE
POST_NAME
POST_CONTENT
post_status
meta_title
meta_description
post_author
POST_DATE
删除其他JSON字段/结构,因此只有"帖子":[]
使用 JSON到CSV转换器,如下所示 - https://konklone.io/json/并下载CSV结果文件。
<强>注意:强>
Ghost不支持使用其他数据导出图像(截至31/01/2017)。
您可能希望更改&#34; post_status&#34;来自&#34;发布&#34;到&#34;待定&#34;,所以在正确编辑之前不会立即发布帖子;)
答案 3 :(得分:0)
以防将来有人在寻找这个东西:
您可以使用ghost-to-wp npm软件包。这会将您从Ghost导出时获得的JSON文件转换为可以直接导入WordPress的WordPress就绪WXR文件:
$ npm i -g ghost-to-wp
$ ghost-to-wp yourghostexport.json
如@lomza所述,仍然无法将图像很好地导出为Ghost文件的一部分,因此您将不得不手动迁移图像。
披露:我是ghost-to-wp
的作者。
答案 4 :(得分:0)
我尝试了各种导入器,最好的解决方案最终只是直接从 RSS URL 导入,例如带有 import-xml-feed 插件的 https://myghostblog.com/rss/
。
附言记住分页。默认情况下,您的 RSS 链接可能仅显示帖子的第一页,因此要导入其他页面,您必须手动将 /2/
/3/
添加到 URL 并分别导入每个页面。 (至少,这是我需要做的。)