2007年1月28日

学着自己修改了一下WordPress

几天换服务器的时候顺手把blog后台程序WordPress升级到了最新版2.1。升级前就听网友说2.1是一次主要升级,改动不小,升级之后果然发现了一堆问题。最郁闷的就是侧边栏里的友情链接坏掉了。

以前为了让每一个分类单独用一个div块,没有像默认模版那样简单地写一句wp_list_bookmarks(),而是采用WordPress官网的写法,把链接的category和name分别读取显示。

get_results("SELECT cat_id, cat_name FROM $wpdb->linkcategories");
foreach ($link_cats as $link_cat)
{ ?>

cat_id; ?>">
cat_name; ?>


    cat_id); ?>




}?>

WordPress升级到2.1之后这一块就坏掉了,提示说数据库错误。没办法,不知道该问谁,只好学着自己读一下WP。反正早晚得学。升级前的数据库幸好保留了一份,对照着看了一下,发现数据库有两点改动。

一是cat_id改成了cat_ID。盘古是对大小写敏感的虚拟主机,这会导致找不到get_results函数cat_id项。解决办法是把代码中cat_id统统改成cat_ID。

二是数据库的linkcategories(链接分类)表合并进了categories(文章分类)表,链接分类放在了文章分类之后。这导致get_results("SELECT cat_id, cat_name FROM $wpdb->linkcategories")这一句失效,因为不存在linkcategories表。我首先试着把调用get_results函数时的linkcategories改成categories,但是这样不但输出了链接分类,同时还输出了文章分类,这显然不是我想要的。再观察发现categories表中增加了一项link_count,应该是WordPress 2.1新增加的,用于记录该分类下有多少个链接。因此我在每一个foreach的循环中根据link_count是否为零来判断是否为链接分类,从而正确地输出。
修改后的代码为

get_results("SELECT cat_ID, cat_name, link_count FROM $wpdb->categories");
foreach ($link_cats as $link_cat)
{
 if ( $link_cat->link_count )
{ ?>

cat_ID; ?>">
cat_name; ?>


    cat_ID); ?>




}
}
?>

这是我第一次自己动手阅读并修改WordPress代码。虽然为了这么点小事前后折腾了一个多小时,还是觉得很高兴的。毕竟一个对php语法和WordPress函数数据结构一无所知的菜鸟,现在知道了得配对但是不必在同一个花括号{}里面,知道了简单的php判断语句,连蒙带猜地知道了wp_get_links和wpdb->get_results两个函数的用法,并且最终凭借这些东拼西凑的三脚猫功夫发现并解决了实际问题。

,

2007年1月2日

新年快乐

蜗牛祝各位朋友心想事成万事如意.推研的朋友可着劲地玩,考研的朋友过关斩将无往不利,出国的朋友拿到一堆牛offer,工作的朋友龙马精神一帆风顺,单身的朋友找到称心如意的另一半,coupled的朋友和和美美甜甜蜜蜜,小朋友噌噌地长高,大朋友事事顺心,老朋友身康体健,欠蜗牛bg的朋友彩票中奖,蜗牛欠bg的朋友宰相肚里能撑船.