博客从 WordPress 迁移至 Halo

WordPress 是一个免费的开源项目,使用 PHP 语言开发的博客平台,并逐步演化成一款内容管理系统软件,数据开发基于 MySQL,有许多第三方开发的免费模板,安装方式简单易用。其它详细信息请参考官方网站,有特别详细的说明,地址如下。

官方英文网站:https://wordpress.org/

官方中文网站:https://cn.wordpress.org/

Halo 也是一个免费的开源项目,使用 Java 语言开发的博客平台,官网解释是一款现代化的开源博客/CMS 系统,值得一试。数据库开发可基于 H2、MySQL,默认是 H2,可自定义,安装方式简单易用,还可基于 docker 安装,方便快捷。其它详细信息也请参考官方网站,有特别详细的说明,地址如下。

官方网站:https://cn.wordpress.org/

两个博客的安装,配置,调试,访问等,这里就不再介绍了,请参考上面的官方文档。

这篇主要说说,当且仅当你当前的博客是 WordPress,如何迁移到 Halo。其实应用部分,相当于基于 Halo 新搭建部署一个博客,但数据部分,如何从 WordPress 对应的表,迁移到 Halo 对应的表,是最复杂的部分,因为两个博客 MySQL 表类似却又不同,没法直接迁移,需要做字段对应关系才行。

WordPress 和 Halo 博客后台对应的表清单分别如下:

   

当然,每个人 WordPress 对应的表也许不一样,因为自己安装了部分插件等,都会新生成各种表,但 WordPress 刚部署搭建的几张通用表都是一样的,如文章、评论、链接、用户等表。

接下来,干货来了,如何把数据迁移过去呢?

提前注意:以下 SQL 脚本中,部分死值都是博主自己根据自有情况写的,请执行脚本前,对部分 SQL 脚本进行编辑再执行,切记!!!

脚本一:迁移分类目录。

INSERT INTO categories
SELECT
	t.term_id id,
	now() create_time,
	now() update_time,
	t.description description,
	t1.`name` NAME,
	t.parent parent_id,
	NULL PASSWORD,
	t1.slug slug,
	NULL slug_name,
	'' thumbnail 
FROM
	wp.wp_term_taxonomy t
	LEFT JOIN wp.wp_terms t1 ON t.term_id = t1.term_id 
WHERE
	t.taxonomy = 'category' 
ORDER BY
	t.term_id

脚本二:迁移标签。

insert into tags
SELECT
	t.term_id id,
	now() create_time,
	now() update_time,
	t1.`name` NAME,
	t1.slug slug,
	t1.slug slug_name,
	'' thumbnail 
FROM
	wp.wp_term_taxonomy t
	LEFT JOIN wp.wp_terms t1 ON t.term_id = t1.term_id 
WHERE
	t.taxonomy = 'post_tag' 
ORDER BY
	t.term_id

脚本三:迁移文章。

注意:如果你在 WordPress 中写的文章够多,这个 SQL 执行很慢,请耐心等待。。。

insert into posts
SELECT
	0 type,
	t1.id id,
	t1.post_date create_time,
	t1.post_modified update_time,
	0 disallow_comment,
	t1.post_modified edit_time,
	0 editor_type,
	t1.post_content format_content,
	0 likes,
	NULL meta_description,
	NULL meta_keywords,
	t1.post_content original_content,
	'' PASSWORD,
	t1.id slug,
	0 STATUS,
	'' summary,
	'' template,
	'' thumbnail,
	t1.post_title title,
	0 top_priority,
	NULL url,
	t2.meta_value visits,
	0 word_count 
FROM
	wp.wp_posts t1
	LEFT JOIN wp.wp_postmeta t2 ON t1.id = t2.post_id 
	AND t2.meta_key = 'post_views_count' 
WHERE
	t1.post_type = 'post' 
ORDER BY
	t1.id

脚本四:迁移页面。

insert into posts
SELECT
	1 type,
	t1.id id,
	t1.post_date create_time,
	t1.post_modified update_time,
	0 disallow_comment,
	t1.post_modified edit_time,
	0 editor_type,
	t1.post_content format_content,
	0 likes,
	NULL meta_description,
	NULL meta_keywords,
	t1.post_content original_content,
	'' PASSWORD,
	t1.id slug,
	0 STATUS,
	'' summary,
	'' template,
	'' thumbnail,
	t1.post_title title,
	0 top_priority,
	NULL url,
	t2.meta_value visits,
	0 word_count 
FROM
	wp.wp_posts t1
	LEFT JOIN wp.wp_postmeta t2 ON t1.id = t2.post_id 
	AND t2.meta_key = 'post_views_count' 
WHERE
	t1.post_type = 'page' 
ORDER BY
	t1.id

脚本五:迁移用户。

注意:如果你在 WordPress 中用户很多,这个 SQL 执行也很慢,请耐心等待。。。

insert into users
SELECT
	t1.id id,
	t1.user_registered create_time,
	t1.user_registered update_time,
	NULL avatar,
	t1.user_url description,
	t1.user_email email,
	t1.user_registered expire_time,
	NULL mfa_key,
	0 mfa_type,
	t1.display_name nickname,
	t1.user_pass PASSWORD,
	t1.user_login username 
FROM
	wp.wp_users t1 
WHERE
	t1.id <> 1 
ORDER BY
	t1.id

脚本六:迁移评论。

insert into comments
SELECT
	0 type,
	t1.comment_ID id,
	t1.comment_date create_time,
	t1.comment_date update_time,
	t1.comment_mail_notify allow_notification,
	t1.comment_author author,
	t1.comment_author_url author_url,
	t1.comment_content content,
	t1.comment_author_email email,
	'055c801bbbea60177266fe798f1e7164' gravatar_md5,
	t1.comment_author_IP ip_address,
	0 is_admin,
	t1.comment_parent parent_id,
	t1.comment_post_ID post_id,
	0 STATUS,
	NULL top_priority,
	t1.comment_agent user_agent 
FROM
	wp.wp_comments t1 
ORDER BY
	t1.comment_ID

注意,这个脚本迁移的评论是所有评论,需要结合前面刷过的 post 表,把页面的评论单独刷一下,否则页面评论关联不上。脚本如下:

UPDATE comments t1,
posts t2 
SET t1.type = 1 
WHERE
	t1.post_id = t2.id 
	AND t2.type = 1

脚本七:迁移链接。

insert into links
SELECT
	t1.link_id id,
	t1.link_updated create_time,
	now() update_time,
	t1.link_description description,
	t1.link_image logo,
	t1.link_name NAME,
	t1.link_rating priority,
	t1.link_rel team,
	t1.link_url url,
	t1.link_notes notes 
FROM
	wp.wp_links t1 
ORDER BY
	t1.link_id

脚本八:迁移文章和分类目录的关系。

insert into post_categories
SELECT NULL
	id,
	t3.post_date create_time,
	t3.post_modified update_time,
	t.term_id category_id,
	t3.id post_id 
FROM
	( SELECT * FROM wp.wp_posts WHERE post_type = 'post' ) t3
	JOIN wp.wp_term_relationships t2 ON t3.id = t2.object_id
	JOIN wp.wp_term_taxonomy t ON t2.term_taxonomy_id = t.term_taxonomy_id 
	AND t.taxonomy = 'category'

脚本九:迁移文章和标签的关系。

insert into post_tags
SELECT NULL
	id,
	t3.post_date create_time,
	t3.post_modified update_time,
	t3.id post_id,
	t.term_id tag_id 
FROM
	( SELECT * FROM wp.wp_posts WHERE post_type = 'post' ) t3
	JOIN wp.wp_term_relationships t2 ON t3.id = t2.object_id
	JOIN wp.wp_term_taxonomy t ON t2.term_taxonomy_id = t.term_taxonomy_id 
	AND t.taxonomy = 'post_tag'

通过以上九步走,你的 WordPress 中的大部分基本数据均迁移完成,可以上 Halo 后台查看各个页面是否都展示了数据。如果部分页面以上,可以查看对应脚本,以及刷入的数据关系,是否有对不上的地方,烦请自行补充脚本再次刷数。

以下贴一些后台数据展现的截图,供参考:

仪表盘:

 

文章列表:

分类目录:

标签列表:

页面列表:

评论列表:

Good Luck!

posted @ 2022-01-12 13:59  孟郎郎  阅读(457)  评论(0编辑  收藏  举报