使用织梦 CMS 每个月都被黑,打完官方最新补丁不久又有漏洞继续被黑,算是受够了,果断把网站从天杀的 dedecms 中搬家到 WordPress 程序,网上搜索转换教程,折腾几个小时,顺利把网站的文章转移到 WordPress 程序,保留了文章点击数、文章日期、文章分类,文章标签的数据表着实弄不过来,只能放弃!下面是具体的操作方法,操作前请备份好网站数据。

1 、 DEDECMS 文章标题等基本数据导入 WordPress 站点

织梦 CMS 的文章标题、正文和栏目分别存放在三个不同的数据表中,而 WordPress 则把文章标题和正文放在一个数据表,栏目(分类目录)放在另一个数据表中,为了简化后面的工作,第一步是制作生成织梦 CMS 的全站 RSS 文件(制作方法:http://www.qimiweb.com/article/dedecms/201305/48.html),然后通过 WordPress 程序后台——工具——导入——RSS,上传导入生成的织梦全站 RSS 文件。

这样就可以使 WordPress 在 wp_posts 数据表上生成文章标题,在 wp_terms 数据表上生成文章分类,并匹配起来,此外通过 RSS 导入,wp_posts 数据表上还导入了文章摘要、日期、自定义网址等数据,但是 RSS 不会导入全文!

2 、导入织梦 CMS 文章全文到 WordPress 站点

织梦文章的数据存储在 dede_addonarticle 数据库的 body 字段中,现在需要把 body 字段的内容转到 WordPress 数据库的 wp_posts 数据库的 post_content 字段里。

这个转换需要使用一个桥梁——那就是 dede_archives 数据表,即 dede_addonarticle 上 body 的内容先转到 dede_archives 上,再从 dede_archives 转到 wp_posts 的 post_content 里。这两次转换的匹配点,分别是织梦里的文章 id,以及 WordPress 里已经导入了的文章标题(这与织梦里的文章标题是一样的)。

具体的操作步骤如下:

进入 phpmyadmin,选择 dedecms 网站使用的数据库,在 SQL 输入框中执行以下 SQL 语句,在织梦数据库的 dede_archives 表上,添加字段 body

ALTER TABLE dede_archives ADD body longtext NOT NULL

然后再执行以下 SQL 语句把 dede_addonarticle 数据表中的 body 字段内容导入到 dede_archives 的 body 字段,语句以 dede_addonarticle 的 aid 和 dede_archives 的 id 为匹配点:

UPDATE dede_archives,dede_addonarticle
SET dede_archives.body = dede_addonarticle.body
WHERE dede_archives.id = dede_addonarticle.aid

接着通过 phpmyadmin 导出功能把 dede_archives 数据表导出,然后再通过导入功能把该数据表导入 WordPress 网站使用的数据库中,使其与 wp_posts 数据库处在同一个数据库里。

下面再次使用 SQL 语句把 dede_archives 的 body 导入到 wp_posts 上的 post_content 上,以文章标题为匹配点(前提是文章标题都是唯一的):

UPDATE wp_posts,dede_archives
SET wp_posts.post_content = dede_archives.body
WHERE wp_posts.post_title = dede_archives.title

至此文章内容部分转换完成!

3 、织梦 CMS 文章点击数导入 WordPress 网站

织梦 CMS 的文章有点击数(即是文章的阅读数),不导入 WordPress 怪可惜。

在 WordPress 上安装 Simple Hit Counter 插件,启用后数据库里会生成 wp_hitcount 表,在 SQL 输入框中执行以下语句在增加 hits 字段

ALTER TABLE wp_posts ADD hits int(10) NOT NULL

执行以下 SQL 语句,把 dede_archives 上的点击数 click 导入到 wp_posts 的 hits 上,仍然以标题为匹配点:

UPDATE wp_posts,dede_archives
SET wp_posts.hits = dede_archives.click
WHERE wp_posts.post_title = dede_archives.title

最后执行以下 SQL 语句把 wp_posts 的 hits 导入到 wp_hitcount 的 hits 上,这次以 wp_posts 的 ID 和 wp_hitcount 的 pid 为匹配点:

UPDATE wp_posts,wp_hitcount
SET wp_hitcount.hits = wp_posts.hits
WHERE wp_hitcount.pid = wp_posts.ID

至此点击数转换完成,然后在模板中添加 Simple Hit Counter 插件调用代码即可。

附:我习惯使用 wp-postviews 插件,所以我是把织梦 CMS 文章点击数转换为 wp-postviews 插件的浏览数。但是由于该插件需要文章有浏览数之后才会在数据库中生成 meta_key 的值,因此需要先在 wp_postmeta 表中添加对应的 meta_key 的值。

执行以下 SQL 语句,把文章 ID 导入 wp_postmeta 中的 post_id 字段:

INSERT INTO wp_postmeta(post_id) SELECT ID FROM wp_posts

执行以下 SQL 语句,把上面添加的 post_id 中的 meta_key 字段的 null 设置为 views 值:

UPDATE wp_postmeta SET meta_key='views' WHERE meta_key IS NULL

执行以下 SQL 语句,把上面添加的 post_id 中的 meta_value 字段的 null 设置为 0 值:

UPDATE wp_postmeta SET meta_value='0' WHERE meta_value IS NULL

然后再把 wp_posts 的 hits 导入到 wp_postmeta 数据表中的 meta_key 字段的值 views 对应的 meta_value,SQL 语句如下:

UPDATE wp_postmeta,wp_posts
SET wp_postmeta.meta_value=wp_posts.hits
WHERE  wp_postmeta.post_id=wp_posts.ID AND meta_key='views'

VI:bokeba