将Ghost导出到Wordpress

时间:2014-07-08 14:20:44

标签: json wordpress parsing

我一直在寻找将Ghost Blog帖子复制到Wordpress的可能性。

到目前为止,我已设法将所有ghost数据导出到JSON文件 - 您知道任何现有工具将其转换为Wordpress可导入的内容吗?

如果没有,我必须自己构建一些东西,你会建议将JSON解析为WXR文件或类似文件,或者直接导入Wordpress的DB吗?

提前致谢! ķ。

5 个答案:

答案 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发布迁移。我做的是:

  1. 导出JSON数据,如此处所述 - https://help.ghost.org/hc/en-us/articles/224112927-Import-Export-Data
  2. 将一些JSON字段(如title,markdown ...)更改为post_title和post_content等(WP po​​st字段列表在此处为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

  3. 删除其他JSON字段/结构,因此只有"帖子":[]

  4. 使用 JSON到CSV转换器,如下所示 - https://konklone.io/json/并下载CSV结果文件。

  5. 现在,当您有CSV文件时,请安装WordPress CSV导入程序插件 - https://wordpress.org/plugins/wp-ultimate-csv-importer/(或类似)
  6. 将CSV文件上传到导入程序,检查是否正确选择了字段。
  7. 享受WP仪表板上的导入帖子;)
  8. <强>注意:

    1. Ghost不支持使用其他数据导出图像(截至31/01/2017)。

    2. 您可能希望更改&#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 并分别导入每个页面。 (至少,这是我需要做的。)