Wordpres和Ghost博客互转
前两天将自己的博客由wordpress转为ghost,google的过程是痛苦的,因为要验证是否可行,参考了很多文章1,最后搞定了。
一、Wordpress转Ghost
1、文章
在Wordpress安装Ghost导出插件,安装后,启用该插件,从‘工具’-‘Export to Ghost’导出文章内容。
注意:这里仅能导出文章(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
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"><</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>></div><span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err"><</span><span class="nt">script</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">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"></</span><span class="nt">script</span>><span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="err"><</span><span class="nt">noscript</span>>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><a<span class="w"> </span><span class="na">href</span><span class="o">=</span><span class="s2">"https://disqus.com/?ref_noscript"</span>>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>.</a></noscript><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!否则,无法生效,看不到效果。
注解:
- post.hbs添加的代码,是在文章页显示评论界面。
- default.hbs添加的代码,是展示评论数的js文件。
- 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的范畴。
https://www.ghostforbeginners.com/migrating-your-wordpress-blog-to-ghost/ https://help.ghost.org/hc/en-us/articles/225093168-Migrating-From-WordPress-to-Ghost ↩︎

