文章

Wordpres和Ghost博客互转

Wordpres和Ghost博客互转

前两天将自己的博客由wordpress转为ghost,google的过程是痛苦的,因为要验证是否可行,参考了很多文章1,最后搞定了。

一、Wordpress转Ghost

1、文章

在Wordpress安装Ghost导出插件,安装后,启用该插件,从‘工具’-‘Export to Ghost’导出文章内容。

1

注意:这里仅能导出文章(post)和独立页面(page),无法导出分类,所以必须要先将分类转为tags。

点击Download Ghost File,导出ghost能够导入的json文件。

2、评论

因为Ghost没有评论系统,所以需要使用第三方评论系统,比如,disqus ,网易云跟帖。这里我们以disqus为例。

首先,注册disqus账号。其次,增加一个disqus站点,添加你的域名,之后,在wordpress安装disqus插件,以你的disqus账号登陆成功后,有一个Import and Export设置项目,点击Export comments to Disqus后面的Export Comments,这样就把wordpress中的评论全部导出到disqus了。

3、文件

将主机wordpress/wp-content/uploads目录下面的所有文件复制到ghost/content/imges目录。然后修改你导出的JSON文件里面的附件路径。

1
sed -i .bak -e 's|wp-content\\/images|content\\/images|g' wp2ghost_export_1418184250.json

4、导入

之后将我们编辑过的json文件打包为zip文

1
zip wp2ghost.zip wp2ghost_export_1418184250.json

进入Ghost后台的Labs菜单,点击Import下的choose file,选择zip压缩文件,然后import

2

5、给Ghost增加disqus评论系统

编辑ghost/content/theme/casper/post.hbs文件,在</footer>和</article>之间添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<figure class="highlight"><pre><code class="language-liquid" data-lang="liquid"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre><span class="cp">{%</span><span class="w"> </span><span class="err">&lt;</span><span class="nt">div</span><span class="w"> </span><span class="na">id</span><span class="o">=</span><span class="s2">"disqus_thread"</span>&gt;&lt;/div&gt;<span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err">&lt;</span><span class="nt">script</span>&gt;<span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="nt">var</span><span class="w"> </span><span class="na">disqus_config</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">function</span><span class="w"> </span>()<span class="w"> </span>{<span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w">     </span><span class="nt">this</span><span class="p">.</span><span class="nv">page</span><span class="p">.</span><span class="na">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'{{url absolute="true"}}'</span>;<span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w">     </span><span class="nt">this</span><span class="p">.</span><span class="nv">page</span><span class="p">.</span><span class="na">identifier</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'ghost-{{id}}'</span>;<span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err">};</span><span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err">(</span><span class="nt">function</span>()<span class="w"> </span>{<span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="nt">var</span><span class="w"> </span><span class="na">d</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">document</span><span class="p">,</span><span class="w"> </span><span class="na">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">d</span><span class="p">.</span><span class="nv">createElement</span>('script');<span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="nt">s</span><span class="p">.</span><span class="na">src</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'https://你的disqus网站名.disqus.com/embed.js'</span>;<span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="nt">s</span><span class="p">.</span><span class="nv">setAttribute</span>('data-timestamp',<span class="w"> </span>+new<span class="w"> </span><span class="nv">Date</span>());<span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err">(</span><span class="nt">d</span><span class="p">.</span><span class="nv">head</span><span class="w"> </span><span class="p">|</span><span class="err">|</span><span class="w"> </span><span class="nf">d</span><span class="p">.</span><span class="nv">body</span>).appendChild(s);<span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err">})();</span><span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err">&lt;/</span><span class="nt">script</span>&gt;<span class="w">  </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err">&lt;</span><span class="nt">noscript</span>&gt;Please<span class="w"> </span><span class="nv">enable</span><span class="w"> </span><span class="nv">JavaScript</span><span class="w"> </span><span class="nv">to</span><span class="w"> </span><span class="nv">view</span><span class="w"> </span><span class="nv">the</span><span class="w"> </span>&lt;a<span class="w"> </span><span class="na">href</span><span class="o">=</span><span class="s2">"https://disqus.com/?ref_noscript"</span>&gt;comments<span class="w"> </span><span class="nv">powered</span><span class="w"> </span><span class="nv">by</span><span class="w"> </span><span class="nv">Disqus</span>.&lt;/a&gt;&lt;/noscript&gt;<span class="w"> </span><span class="cp">%}</span>
</pre></td></tr></tbody></table></code></pre></figure>

注意:代码中你的disqus网站名,这个填你自己的网站名。

编辑ghost/content/themes/casper/default.hbs文件,在</body>之前增加如下代码

1
<script id="dsq-count-scr" src="//你的disqus网站名.disqus.com/count.js" async></script>

编辑ghost/content/themes/casper/partials/loop.hbs文件,在</footer>之前添加如下代码

1
(<a href="#disqus_thread">Comments</a>)

修改好后,重启你的Ghost!否则,无法生效,看不到效果。

注解:

  1. post.hbs添加的代码,是在文章页显示评论界面。
  2. default.hbs添加的代码,是展示评论数的js文件。
  3. loop.hbs添加的代码,是为了在首页展示评论数。

二、Ghost转Wordpress

1、导出JSON

点击Labs菜单,点击 Export 按钮,导出json文件。

2、导入wordpress

下载ghost2wp这个python脚本,经我验证,文章可以完整导入。这个脚本它是解析json文件后,使用XML-RPC协议将所有文章和页面导入wordpress,个人觉得还是挺完美的,貌似无法导入tags,因为我用我的博客实验的,导入后没有tags。它使用了python-wordpress-xmlrpc这个模块,要求版本必须大于等于2.3。

1
git https://github.com/jbfriedrich/ghost2wp.git

然后将json文件放到和ghost2wp.py同级的目录,之后运行ghost2wp.py文件

1
python ghost2wp.py -e http://example.com/xmlrpc.php -f xxx.json -u WP用户名 -p 'WP密码'

三、其他

其实ghost还可以导出为markdown文件,然后使用在其他的静态类博客程序中。比如,ghost2hexo,这是我也试验了,确实可以将所有文章,用slug作为文件名,导出为markdown文件。ghost博客还是挺好使的,和其他的php博客相比,资源占用小,目标明确,就是一个单纯的blog程序,像wordpress,就不应该属于blog程序了,因为太庞大,应该定义到CMS的范畴。

  1. https://www.ghostforbeginners.com/migrating-your-wordpress-blog-to-ghost/ https://help.ghost.org/hc/en-us/articles/225093168-Migrating-From-WordPress-to-Ghost ↩︎

本文由作者按照 CC BY 4.0 进行授权