从 Wordpress 迁移到 Octopress

/

Wordpress 的臃肿终于让我这个一度的 Wordpress 粉也忍受不了了,加之目前 OctopressHexo 等静态博客生成工具大行其道,我一俗人终究不能免俗,也中了 Octopress 的毒,选择 Octopress 而不是 Hexo 原因很简单,我会一点 Ruby 但是完全不会 Nodejs。

Octopress 的基本设置官网文档已经非常详细了,不作累述,重点讲一下如何从 Wordpress 无缝迁移到 Octopress。

将 Wordpress 的文章导入到 Octopress

  1. 在 Wordpress 后台的导出功能中将所有文章和页面导出为一个 xml 文件;
  2. 使用 exitwp 将 xml 文件转化为 Octopress 可用的 markdown 文件,复制到 source 目录下。

将 Wordpress 的评论导出到多说和在 Octopress 中集成多说

Octopress 是静态的,只能集成第三方评论系统,比如自带的 Disqus,但是 Disqus 在国内的龟速不是每个人都能忍受,所以我选择集成到多说。将 Wordpress 的评论导出到多说后,再在 Octopress 集成,就能实现评论无缝迁移,关键点在于 Thread Key 要一致,Thread Key 是多说判定文章唯一性的唯一标识,如果两篇文章标题和 URL 相同,但是 Thread Key 不同,那么在多说的世界里,仍然认为它们是两篇不同的文章,一篇文章的评论并不能在另一篇中看到。多说默认使用文章 ID 作为 Thread Key,显然如果使用默认设置,在 Octopress 中是看不到任何评论的,因为同一篇文章在 Wordpress 和 Octopress 的 ID 相同的概率小的可怜。因此,我选择更具确定性的 slug 作为 Thread Key

具体做法:修改 Wordpress 的多说插件,将代码中涉及到 Thread Key 的部分的 $post->ID 改为 $post->post_name;然后在 Wordpress 多说插件的设置功能中,将评论同步到多说;最后在 Octopress 中集成多说。

新建 source/post/duoshuo.html

<!-- 多说评论框 start -->
<div class="ds-thread" data-thread-key="{{ page.url | append: '' | remove: 'index.html' | remove: '/' }}" data-title="{{ page.title }}" data-url="{{ site.url }}{{ page.url }}"></div>
<!-- 多说评论框 end -->
<!-- 多说公共JS代码 start (一个网页只需插入一次) -->
<script type="text/javascript">
var duoshuoQuery = {short_name:"{{ site.duoshuo_short_name }}"};
(function() {
  var ds = document.createElement('script');
  ds.type = 'text/javascript';ds.async = true;
  ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
  ds.charset = 'UTF-8';
  (document.getElementsByTagName('head')[0]
   || document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script>
<!-- 多说公共JS代码 end -->

{{ page.url | append: '' | remove: 'index.html' | remove: '/' }} 在 Octopress 中将 slug 作为 Thread Key,与 Wordpress 同步到多说的 Thread Key 设置保持一致。

Thread Key

source/_layouts/post.html 中添加多说评论框:

{% if site.disqus_short_name and page.comments == true %}
  <section>
    <h1>Comments</h1>
    <div id="disqus_thread" aria-live="polite">{% include post/disqus_thread.html %}</div>
  </section>
{% endif %}
<!-- add duoshuo start -->
{% if site.duoshuo_short_name and site.duoshuo_comments == true and page.comments == true %}
<section>
  <h1>Comments</h1>
  <div id="comments" aria-live="polite">{% include post/duoshuo.html %}</div>
</section>
{% endif %}
<!-- add duoshuo end -->

source/_layouts/page.html 中作类似添加。

编辑 _config.yml

#  duoshuo comments
duoshuo_comments: true
duoshuo_short_name: "xxxxxx"

short_name 可以在多说控制面板中的工具中查到。

获取 short_name

Octopress 中的固定链接设置

如果不想站点权重流失,那么 Octopress 中文章的固定链接应该与 Wordpress 中保持一致。我在 Wordpress 中文章的固定链接形式为:http://www.jmlog.com/%postname%/,所以在 _config.yml 应作如下设置:

root: /
permalink: /:title/

Comments