最近,有个用户找模板兔迁移网站,源站用的dede,需要转成wp,文章数量大概7000-8000篇,其中有个需求是保证旧文章的链接有效,在wp上的新文章与旧文章的链接类型不一样,所以这涉及到伪静态来处理跳转。虽然网上都很多教程,但是在这次导入过程中还是遇到过一些问题。
以下教程是dede的数据表得与wp的数据表在同一个数据库下!要是不在,可以将dede_archives先导入到wp的数据库里。
一般流程
1. 文章标题等基本数据导入
织梦的文章标题、正文和栏目分别存放在三个不同的表上,但WordPress把文章标题和正文放在一个表上,栏目放在另外一个表上。
为了简化后面的工作,第一步我首先把织梦的全站RSS文件(rss.php)保存下来,然后使用WordPress自带的RSS导入该文件。这样就可以使WordPress在wp_posts上生成文章标题,在dede_terms上生成文章目录,并匹配起来。通过RSS导入,wp_posts上还导入了文章的摘要、日期、自定义网址等数据。但RSS导入不会导入全文。
2. 文章全文导入
织梦数据库的文章全文储存在dede_addonarticle表上的body里,我们要把这个body的内容转到Worpress数据库里wp_posts表上的post_content里。
这个转换,需要使用一个桥梁——那就是dede_archives,即dede_addonarticle上body的内容先转到dede_archives上,再从dede_archives上再转到wp_posts上的post_content里。这两次转换的匹配点,分别是织梦里的文章id,以及Wordpress里已经导入了的文章标题(这与织梦里的文章标题是一样的)。
具体步骤如下:
进入phpMyAdmin,在织梦数据库里的dede_archives表上,添加一个列,命名为body,然后用UPDATE命令把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`
接下来把整个dede_archives表导入到WordPress的数据库上,使其与wp_posts同在一个数据库下。
再次使用UPDATE命令把,把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. 文章点击数导入
在WordPress上安装一个叫Simple Hit Counter的Plug-in,这样数据库里就出现一个叫wp_hitcount的表。
在wp_posts增加一个叫hits的column,然后把dede_archives上的点击数click导入到wp_posts的hits上,仍然以标题为匹配点。
最后把wp_posts的hits导入到wp_hitcount的hits上,这次以wp_posts的ID和wp_hitcount的pid为匹配点。
常见问题
1、把rss.xml导入wordpress时提示不能获取文章id
Rss.xml编码如果和wp系统的编码不一样,在导入wp时,就会提示不能获取文章id。例如你用的织梦是gbk版本的,而默认的wp是utf版本,就会提示这个错误了。
解决方法:很简单,如果你用的是织梦gbk,那么生成的rss.xml就是gbk的,用dreamwear等编辑工具,把rss.xml改成utf的,之后导入wp,问题就解决了。
2、导入rss.xml的文章数量限制
当你的织梦内容很多时,例如有好几万篇文章,那么导出的rss.xml中也就包含几万标题。在导入wp时,在导入到2000左右就会卡住,不能导入了。
解决方法:很简单,只要把rss.xml重复导入到wp就可以了,因为第二次导入rss.xml时,第一次导入的内容会被跳过,第二次会导入新的内容,重复导入几次后,rss.xml就完全导入成功了。
3、如果织梦数据导入wordpress后,wp网站首页内容显示正常,但内容页没有显示内容。
这应该是你wp的固定连接问题,解决方法:wp后台——设置——固定连接,修改成默认,问题就解决了。
4、在文章全文导入的时候,可能由于文章数量很多,一次性执行sql语句后导致mysql直接挂掉了(这个看各自服务器性能,模板兔的这个客户用的是win主机,性能并不好),所以无奈只能分批次来转换,例如通过wp_posts表里的ID区间来分批转换。
UPDATE wp_posts,dede_archives SET wp_posts.post_content = dede_archives.body WHERE wp_posts.post_title = dede_archives.title and wp_posts.ID < 501
UPDATE wp_posts,dede_archives SET wp_posts.post_content = dede_archives.body WHERE wp_posts.post_title = dede_archives.title and wp_posts.ID < 1001 and wp_posts.ID > 500
以此类推,看你文章多少来决定,我每次执行时间是2两多钟。。。而且在导入过程中还会出现error,提示字符串的问题。
0 个评论