typecho迁移至wordpress

前言

正如标题中所说的,本站所使用的博客平台已经在5月1日由typecho迁移到了wordpress,经过不断的调试,一开始暴露出的小问题基本上都得到了解决,因此开贴记录一下下~

迁移原因

先来说说原因吧。typecho经过这么多年的发展,基本的写文章的功能基本上实现的比较完整了,用markdown写起文章来非常顺心顺手。但是很多细节还是稍有缺失,有的功能还不是很完善,整体看起来还是稍微有些简陋。比如,对memcached/redis并没有官方支持,第三方插件则有各种各样的小bug,每次有评论都得手动刷新等等;邮件通知插件就没有一个能成功发信的(当然可能是我设置有问题)等等……

再加上之前的主题使用有一定时间了(大概一年半),虽然也不是很难看,老版质感设计也很漂亮,但那套主题的一些底层实现有些老旧了,比如使用的是bootstrap3,以及设计的时候没有使用css变量,导致夜间模式这个功能很难加上。好不容易实现了Pjax和灯箱,夜间模式这个大坑我实在是填不上了QAQ…

于是心想,干脆换成wordpress吧!看看wordpress有什么变化。上次使用wordpress是6年前了,给一个初中同学做的一个恶搞网站,搭建在一个免费空间上,慢慢的回忆呀!现在早就没了。

主题

wordpress这边我很快就找到了合适的主题:Wing主题  。这个主题中可以看到质感设计的影子,Pjax,夜间模式,平滑滚动,一眼就看中这个主题了~

Typecho To WordPress

经过多方查找,终于找到了一个实现的很好的宝藏插件——ByeTyp。官方的文档说明非常简洁,操作非常简单,下面就是官方的教程(从官网粘的quq)最下面我也会附上官方发布页的链接~

安装方法

访问**ByeTyp **项目主页:https://github.com/ibadboy-net/ByeTyp  下载最新版的插件。下载后将插件上传并安装到Typecho上。注意上传的时候要为插件的文件夹命名为ByeTyp,否则插件将无法正常运行。

使用方法

启用插件后,按照以下顺序操作,导出当前Typecho的数据。

控制台->数据导出->导出XML文件

当你拿到了后缀为.xml文件的时候你就离成功近了一大步了。接下来你需要将xml文件导入到WordPress中。按照这个顺序操作:

工具->导入->WordPress->运行导入器(未安装的话就先安装)->选择文件->上传并导入->选择导入的文章所属的用户,之后提示是否导入媒体,随便点就行(Xiaomage注:我这里没点,可以不用点上)

之后你就会看到你在Typecho上的文章、分类目录、标签、评论等数据都出现在了WordPress上,但是别急着高兴,因为我们还没能将附件也导入过来。

迁移附件

将Typecho站点中的/usr/uploads目录迁移到WordPress的/wp-content目录下。之后在数据库中替换图片资源路径,执行以下SQL语句:

UPDATE wp_posts SET post_content = REPLACE( post_content, ‘/usr/uploads/’, ‘/wp-content/uploads/’);

至此,大部分数据就从Typecho迁移到Wordpress咯!

手动迁移其他数据

但上面提到的插件貌似不能转移全部数据,比如评论区的UserAgent字段就不能被转移,主题自带的评论UA显示功能就无法正常显示之前的评论的UA。我尝试在ByeTyp插件中合适的地方加入导出UserAgent字段的代码(在276行后添加一行,代码为<wp:comment_agent>{$c['agent']}</wp:comment_agent>),生成的XML文件中也有UserAgent字段,但导入XML之后这个字段…在数据库中仍然是空的…那咱就手动导入吧!

  1. 先将原typecho数据库中的typecho_comments表导入到wordpress数据库中。这一步应该不难吧~直接phpmyadmin中导出再导入就OK啦。其他数据库管理软件也很容易做到。
  2. 编辑wordpress数据库中wp_comments表的属性,把comment_agent的length加大一些,否则可能varchar的长度会不够用。
  3. (可选)统一数据库中的排序规则。我自己一般常用utf8-mb4排序规则,但word press使用的是utf8mb4_unicode_520_ci,需要转换一下。这一步在phpmyadmin中先选择wordpress数据库,再选择操作选项卡,排序规则中选择utf8mb4_unicode_520_ci,勾上“更改所有表排序规则”“更改所有表列的排序规则”两个对勾确定就OK啦!
  4. 上面那一步进行之后,可能会报错“1067 – Invalid default value for ‘comment_date’” 这时可以执行SQL语句
show variables like 'sql_mode' ;

如果结果中含有“NO_ZERO_IN_DATE”,“NO_ZERO_DATE”,则说明当前数据库配置不允许日期为0的数据插入。然而wordpress中默认的comment_date就是0,这就与数据库配置冲突了。可以用下面的SQL语句来解决,改变数据库配置:

set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

最后,执行SQL语句,将typecho中的UA导入到Wordpress中:

UPDATE wp_comments,typecho_comments SET wp_comments.comment_agent = typecho_comments.agent WHERE wp_comments.comment_content = typecho_comments.text

语句运行完,就大功告成啦!

参考资料

无缝从Typecho迁移到WordPress,支持WordPress 5

stackoverflow上的问答

署名 - 非商业性使用 - 禁止演绎 4.0