记录一下第一次 Drupal 转 WordPress . 废话不多说,直接上代码
1.导入数据表前要检查下有没有重复数据
SELECT n.nid `ID`,count(*) FROM node n INNER JOIN node_revisions r USING(vid) LEFT OUTER JOIN url_alias a ON a.src = CONCAT('node/', n.nid) WHERE n.type IN ('post', 'page', 'blog', 'book') group by n.nid having count(*) >1;
如果你的原网站的自定义分类比较多,可以将
WHERE n.type IN ('post', 'page', 'blog', 'book')
这个条件删除
2.导入内容表
INSERT INTO wp_posts (
id,
post_date,
post_content,
post_title,
post_excerpt,
post_name,
post_modified,
post_type,
`post_status`)
SELECT DISTINCT
n.nid `id`,
FROM_UNIXTIME(n.created) `post_date`,
r.body `post_content`,
n.title `post_title`,
r.teaser `post_excerpt`,
IF(SUBSTR(a.dst, 11, 1) = '/', SUBSTR(a.dst, 12), a.dst) `post_name`,
FROM_UNIXTIME(n.changed) `post_modified`,
n.type `post_type`,
IF(n.status = 1, 'publish', 'private') `post_status`
FROM node n
INNER JOIN node_revisions r
USING(vid)
LEFT OUTER JOIN url_alias a
ON a.src = CONCAT('node/', n.nid)
WHERE n.type IN ('post', 'page', 'article','story','news');
和第一步一样,如果你的原网站的自定义分类比较多,可以将
WHERE n.type IN ('post', 'page', 'blog', 'book')
这个条件删除,如果你第一步检测出重复数据需要加
n.nid not in ('167','169')
括号里面的id是根据你第一步查询的结果来的
2,更改文章类型
update wp_posts set post_type='post' where post_type in ('news','story')
3 导入标签表
(这里不得不说下,Drupal的标签和分类是两张表,但是wordpress是一张表,所以你先导入分类的话后面标签的id就和后面对应不上了,所以先导入标签)
insert into wp_terms(name, slug,term_id) SELECT name, name,tid from term_data
4 更改标签类型
备注 ,不该下等会不好区分分类和标签,防止后面导入分类有问题,你最后可以把它还原回去,但是我发现不还原也没发现问题,就暂时没有还原了
update wp_terms set term_group='1'
5 添加到分类/标签表中
insert into wp_term_taxonomy(term_taxonomy_id, term_id) SELECT term_id, term_id from wp_terms
6 更改标签类型
update wp_term_taxonomy set taxonomy='post_tag' where taxonomy=''
7 添加标签和文章的关联
如果你直接导入成功,你是真的走运啊,我导入时报主键有问题,没办法,百度.没有找到好的解决方法,只能用菜办法,在数据库里面吧这张表的两个主键给去掉了,然后截断这张表,重新导入,导入成功,如果部分导入的话会导致部分文章没有标签.去掉后又发现后台有问题,没办法,后面写了一个简单脚本导入,跳过错误项
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) SELECT nid, tid FROM term_node order by nid desc
8 导入分类表
insert into wp_terms(name, slug) SELECT name, type from node_type
9 添加到分类表中
insert into wp_term_taxonomy(term_taxonomy_id, term_id) SELECT term_id, term_id from wp_terms where term_group=0
10 更改分类类型
update wp_term_taxonomy set taxonomy='category' where taxonomy=''
我第一遍导入的时候人为手动 将node_type表中一个字段的值改为上面wp_terms 表中分类的值,第二遍导入时给忘记了,发现没事大影响,有影响的话可以手动修改下表中的值
11 添加分类和文章的关联
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id)
SELECT nid, min_word_count FROM node JOIN node_type where node.type=node_type.type
评论表没有要求转,我就没有弄了
如上就基本完成了Drupal 转 WordPress .
然后发现前台好多链接打开都是404,坑爹啊,没办法,继续搞啊.在后台下载插件 Custom Permalinks
下面直接用php脚本来搞了
附录1:将文章自定义的链接导入到数据库
附录2:将标签的自定义链接导入到数据库
附录3:中文标签打不开,转码标签