Textpattern带了Wordpress的导入脚本,本以为一帆风顺,结果却问题多多,不得已修改了一下脚本,现总结一番
*Update: 所有修改都在 textpatter/includes/import/import_wp.php*
*1. 中文乱码*
老问题了,不过一般都可以用SET NAMES查询来解决,这次也不例外
mysql_select_db($b2db,$b2link);
$results[]= 'connected to wp database. Importing Data';
改成
mysql_select_db($b2db,$b2link);
$results[]= 'connected to wp database. Importing Data';
mysql_query ("set names 'utf8';");
*2. 打开评论*
Textpattern导入文章默认是关闭评论的,这个比较郁闷
差不多刚才那个地方,紧接着是从wordpress里取出post的查询语句
$a = mysql_query("
select
".$wpdbprefix."posts.ID as ID,
".$wpdbprefix."posts.post_date as Posted,
".$wpdbprefix."posts.post_title as Title,
".$wpdbprefix."posts.post_content as Body,
".$wpdbprefix."users.user_login as AuthorID
from ".$wpdbprefix."posts
left join ".$wpdbprefix."users on
".$wpdbprefix."users.ID = ".$wpdbprefix."posts.post_author
",$b2link) or $results[]= mysql_error();
修改查询语句,取出原来post的评论状态字段:
$a = mysql_query("
select
".$wpdbprefix."posts.ID as ID,
".$wpdbprefix."posts.post_date as Posted,
".$wpdbprefix."posts.post_title as Title,
".$wpdbprefix."posts.post_content as Body,
".$wpdbprefix."posts.comment_status as CommentStatus, /* 评论状态 */
".$wpdbprefix."users.user_login as AuthorID
from ".$wpdbprefix."posts
left join ".$wpdbprefix."users on
".$wpdbprefix."users.ID = ".$wpdbprefix."posts.post_author
",$b2link) or $results[]= mysql_error();
保存post到textpattern的查询语句也要修改:
$q = mysql_query("
insert into `".PFX."textpattern` set
Posted = '".addslashes($Posted)."',
Title = '".addslashes($textile->TextileThis($Title,1))."',
url_title = '".stripSpace($Title,1)."',
Body = '".addslashes($Body)."',
Body_html = '".addslashes($Body_html)."',
AuthorID = '".addslashes($AuthorID)."',
Category1 = '".addslashes($Category1)."',
Category2 = '".addslashes($Category2)."',
Section = '$insert_into_section',
uid='".md5(uniqid(rand(),true))."',
feed_time='".substr($Posted,0,10)."',
AnnotateInvite = '$default_comment_invite',
Status = '$insert_with_status'
",$txplink) or $results[]= mysql_error();
改成:
$q = mysql_query("
insert into `".PFX."textpattern` set
Posted = '".addslashes($Posted)."',
Title = '".addslashes($textile->TextileThis($Title,1))."',
url_title = '".stripSpace($Title,1)."',
Body = '".addslashes($Body)."',
Body_html = '".addslashes($Body_html)."',
AuthorID = '".addslashes($AuthorID)."',
Category1 = '".addslashes($Category1)."',
Category2 = '".addslashes($Category2)."',
Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',
Section = '$insert_into_section',
uid='".md5(uniqid(rand(),true))."',
feed_time='".substr($Posted,0,10)."',
AnnotateInvite = '$default_comment_invite',
Status = '$insert_with_status'
",$txplink) or $results[]= mysql_error();
*3. 永久链接*
textpattern的永久链接真是不敢恭维,居然不支持中文,如果直接导入的话,所有的文章永久链接里的中文都将丢失,当然用id方式的没关系,但是对于我等使用/year/month/day/title格式的就...为了保持无缝切换(因为之前wp的永久链接就是这个格式),对脚本再一次修改
因为所涉及的查询语句和之前打开评论的完全一样,所以简单说一下,不再重复
1) 取出链接
在刚才插入
".$wpdbprefix."posts.comment_status as CommentStatus,
的地方再插入一句
".$wpdbprefix."posts.post_name as PostName,
2) 保存链接
在刚才插入
Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',
的地方找到
url_title = '".stripSpace($Title,1)."',
修改成
url_title = '".addslashes($PostName)."',
*4. 用户显示名称*
之前用wp一直用admin用户发表文章,但是显示名称改成了自己的名字,这样导入的话所有文章的作者名字都会是原始的admin,是个小问题,不过总是看着不舒服,一道改了
找到
.$wpdbprefix."users.user_login as AuthorID
修改为
".$wpdbprefix."posts.post_name as PostName,
*5. tags丢失*
当然这个是对于wp 2.3以上用户而言
在取出post之后是一个while循环,挨个处理post,就在这里取tags吧
找到
while($b=mysql_fetch_array($a)) {
//Clean ugly wp slashes before to continue
$b = undoSlash(undoSlash($b));
在后面加入:
$tags = "";
$t = "
select t.name from
".$wpdbprefix."terms AS t,
".$wpdbprefix."term_relationships AS r,
".$wpdbprefix."posts AS p,
".$wpdbprefix."term_taxonomy as ta
where
p.id=".$b['ID']." and p.id=r.object_id and r.term_taxonomy_id=ta.term_id and ta.term_id=t.term_id and ta.taxonomy='post_tag';
";
$e = mysql_query($t, $b2link) or $results[] = mysql_error();
$tag = mysql_fetch_assoc ($e);
if ($tag) {
$tags = $tag['name'];
while ($tag=mysql_fetch_assoc ($e)) {
$tags = $tags . ',' . $tag['name'];
}
$b['tags'] = $tags;
}
tag取出来了,再作为keyword保存就很简单了,在保存post的地方,也就是在刚才插入
Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',
的地方,加入一句
Keywords = '".addslashes($tags)."',
这样就差不多了,然后转个tru_tags插件就和以前一样了
*其实2.3版本的wp已经取消了分类的数据库表,而是和tag的数据库表合并起来,所以textpattern(4.0.5)的导入脚本是不支持tags并且也不能正确导入分类的*