前几天换服务器的时候顺手把blog后台程序WordPress升级到了最新版2.1。升级前就听网友说2.1是一次主要升级,改动不小,升级之后果然发现了一堆问题。最郁闷的就是侧边栏里的友情链接坏掉了。
以前为了让每一个分类单独用一个div块,没有像默认模版那样简单地写一句wp_list_bookmarks(),而是采用WordPress官网的写法,把链接的category和name分别读取显示。
<?php $link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM $wpdb->linkcategories");
foreach ($link_cats as $link_cat)
{ ?>
<div class=panel id="linkcat-<?php echo $link_cat->cat_id; ?>">
<h5><?php echo $link_cat->cat_name; ?></h5>
<DIV class=panel-content>
<UL><?php wp_get_links($link_cat->cat_id); ?></UL>
<BG>
</DIV>
</div>
<?php
}?>
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是否为零来判断是否为链接分类,从而正确地输出。
修改后的代码为
<?php $link_cats = $wpdb->get_results(“SELECT cat_ID, cat_name, link_count FROM $wpdb->categories“);
foreach ($link_cats as $link_cat)
{
if ( $link_cat->link_count )
{ ?>
<div class=panel id=”linkcat-<?php echo $link_cat->cat_ID; ?>”>
<h5><?php echo $link_cat->cat_name; ?></h5>
<DIV class=panel-content>
<UL><?php wp_get_links($link_cat->cat_ID); ?></UL>
<BG>
</DIV>
</div>
<?php
}
}
?>
这是我第一次自己动手阅读并修改WordPress代码。虽然为了这么点小事前后折腾了一个多小时,还是觉得很高兴的。毕竟一个对php语法和WordPress函数数据结构一无所知的菜鸟,现在知道了<?php和?>得配对但是不必在同一个花括号{}里面,知道了简单的php判断语句,连蒙带猜地知道了wp_get_links和wpdb->get_results两个函数的用法,并且最终凭借这些东拼西凑的三脚猫功夫发现并解决了实际问题。