以前用的是2.2版本,现在最新版是2.3.1,我看重的主要改进是添加了tag的支持,就升过来了。
升级过程非常简单,下载包,解压,覆盖,然后执行一下wp-admin/upgrade.php
就可以了。
忘记了WordPress从哪个版本开始支持Widgets功能的,可我用的这个模板是从1.5版本的默认主题,一路改过来的,虽然没有动大手术,琐碎的修改还是有一些的。对于我这个懒人来说,重新套模板然后更改显然是不划算的,虽然后来学聪明了,有些修改作成了插件,剩下的好像也不少,所以尽可能的在旧模板的基础上更改。
Widgets好像就是个可高度自定义的sidebar,在我现在的模板中,打开Widgets页面总是提示“No Sidebars Defined”,不支持,好在我的要求也不高,咱自己动手,丰衣足食。
WordPress的wp-includes/widgets.php
这个文件,是Widgets的主要实现代码,所以修改主要是参照了这个文件的内容。好了,开始编辑现在这个旧模板的sidebar文件。
首先,要把存档archive改成下拉列表框,月份多了实在看着不舒服,widgets.php中有这么一段:
function wp_widget_archives($args) {
extract($args);
$options = get_option('widget_archives');
$c = $options['count'] ? '1' : '0';
$d = $options['dropdown'] ? '1' : '0';
$title = empty($options['title']) ? __('Archives') : $options['title'];
echo $before_widget;
echo $before_title . $title . $after_title;
if($d) {
?>
<select name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value=""><?php echo attribute_escape(__('Select Month')); ?></option> <?php wp_get_archives("type=monthly&format=option&show_post_count=$c"); ?> </select>
可以看出,内置的wp_get_archives
函数的参数,原来只有type=monthly
,现在多了format=option
和show_post_count=$c
,前者应该代表是否下拉列表框形式显示,值的定义为$options['dropdown']
;后者是是否显示本月文章计数,值的定义为$options['count']
,并且都是用1代表真,0代表假,所以修改就简单了,把原来的:
<?php wp_get_archives('type=monthly'); ?>
更改为:
<select name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value=""><?php echo attribute_escape(__('Select Month')); ?></option> <?php wp_get_archives("type=monthly&format=option&show_post_count=1"); ?> </select>
就行了。
然后,把archive月份存档和category分类列表的位置互换,分类列表放在上面,直接调整代码顺序即可,同时给分类列表也加上分类计数的显示:
<li><h2>Categories</h2>
<ul>
<?php wp_list_cats('sort_column=name&show_count=1'); ?>
</ul>
</li>
最后,添加Tag Cloud,没有这个升级就白作了,参照widgets.php中的:
function wp_widget_tag_cloud($args) {
extract($args);
$options = get_option('widget_tag_cloud');
$title = empty($options['title']) ? __('Tags') : $options['title'];
echo $before_widget;
echo $before_title . $title . $after_title;
wp_tag_cloud();
echo $after_widget;
}
没什么太复杂的,直接调用wp_tag_cloud()
函数,连参数都没有,最终代码为:
<li><h2>Tags Cloud</h2>
<ul>
<?php wp_tag_cloud(); ?>
</ul>
</li>
这样就大功告成了,虽然模板不支持Widgets,侧边栏倒也符合我的基本使用需要了。
参考
- [wp_tag_cloud函数的详细说明文档](http://codex.wordpress.org/Template_Tags/wp_tag_cloud)