昨天折腾了一天,只因为我不希望所有的页面都显示相同的sidebar。网上给出的方法很多,让我深感荣幸的是,我几乎把所有可能的方法都试了一次,除了最后一种之外全部失败了。我觉得我应该谢谢我使用的这个主题OpenAir……它让我大大加深了对Wordpress的了解。可它怎么就特殊到这种地步,什么法子都不顶用呢?
在此总结一下让Wordpress的不同页面显示不同侧边栏的各种方法。如果你挨个儿试到最后一种还是无效,那么恭喜你,你的模板比OpenAir还倔。
(1) 简单有效的Widget插件:widget-logic
这个插件给每个widget 一个扩展控制Widget logic,你可以通过它根据不同页面自定义你的侧边栏内容。
最新版本支持2.5以上,在你使用Wordpress自带的Widget功能时有效。
最新版本下载:http://wordpress.org/extend/plugins/widget-logic/
安装:
上传 widget-logic.php 到 /wp-content/plugins/ ,而后在控制面板激活。这时你会发现,在你已使用的Widget选项下面会多出一个widget logic的框框。里面要填的是”在什么情况下显示该Widget”的判断条件。

示例语言:
is_home() 仅主页显示
!is_category(5) 仅在ID非5的分类显示
is_home() || is_category(’baked-goods’) 在主页或名称为baked-goods的分类显示
is_page(’about’) 仅在关于页显示
||表示或,&&表示和,!表示非。
更多条件语句可参考
http://codex.wordpress.org/Conditional_Tags
(2) 彪悍无敌的Widget管理组件:SBM
Widget-logic只是个小东西,它以最小的代价做到了widget的分页面显示。然而SBM则是完全不同的东西,它认为Wordpress自带的Widget功能太弱了,所以有必要干掉它,然后再启用一个新的侧边栏模块。所以它的名字才叫做Side Bar Module,或者叫做”傻逼妹”。
以下为引用汉化者提供的介绍:
傻逼妹侧边栏插件是迄今为止我见过的最好的侧边栏插件,它除了拥有widget的全部功能以外,还支持php、txt、html模块,且这些模块可以无限制的添加。
它可以让某些模板在特定页面、文章页显示或者隐藏。
基本上,只要支持widget的主题都支持sbm,参见widget的帮助信息修改模板即可。
此处不再赘述,给出作者链接:
我承认这显然是个很好用的东东,但当我运行SBM1/2,即它的两个组件中的第一个,用于禁用Wordpress的Widget功能后,我的Wordpress白了。
白了,就是什么都没有。
我懵了。连管理界面都进不去,怎么办……
好在作者给出了解决办法:把服务器上SBM插件目录的名称改掉,SBM就会自动被禁用。于是我的Widget回来了。
太劲爆了……不敢试了。
(3) Sidebar.php是可以自己写的
我承认这是一种广泛使用的方法。但当我打开我的sidebar.php文件时,我囧了。
它居然只有4行。网上看来的方法都说在某个widget的代码前面加一句类似”is_home()”的页面判断语句,然而我的sidebar根本没地方写!
看来版本新还是有坏处的……针对旧版本的方法在新版本里根本无效。
(4) Wordpress自带的多sidebar功能
在你编辑widget时,肯定曾经注意到右上角有一个”侧边栏1″。可是,Wordpress界面中没有提供一个增加”侧边栏2″的功能。
是不是觉得很奇怪?
我翻遍中文资料,才找到一个真正的多sidebar添加方法。http://blog.ijliao.info/archives/2007/02/16/2889/ 严重感谢原作者。
方法抄录如下:
要把它从 1 个 sidebar 变成 2 个 sidebar,有几个小地方要改;首先是 functions.php,本来是
register_sidebar(array(
,改成
register_sidebars(2, array(
,这意思就是在系统里注册两个 sidebar,你进
Presentation -> Sidebar Widgets
看就会看到 Sidebar 1 和 Sidebar 2;事情还没完,你还得要去改 sidebar.php,把
dynamic_sidebar()
改成
dynamic_sidebar(1)
,指定要用 Sidebar 1。
对 WordPress 的 theme 有点了解的人应该会知道其实 theme 里几乎可以完全靠
index.php
来处理包括首页 / 单篇文章 / 汇整页面 / 特殊页面等等,不过为了让结构单纯一点,也可以把这些功能分离出来,变成
index.php
、
single.php
、
archives.php
、
page.php
分别处理;GlossyBlue 就是这么做的。而在它的设计里,上面那四种页面的处理流程基本上就是
get_header()
->
content
->
get_sidebar()
->
get_footer()
,而
get_sidebar()
就是去呼叫
sidebar.php
;也就是说,在原本的设计里大家都用 Sidebar 1 (在
sidebar.php
里设定的)。而如果想让四种页面分别有不同的 sidebar,也很简单,就是不要去呼叫
get_sidebar()
,自己处理就是了:把
single.php
最下面的
get_sidebar()
改成
if ( function_exists(’dynamic_sidebar’) ) dynamic_sidebar(2);
,也就是叫它使用 Sidebar 2。
到了这里,我本来以为问题解决了,很高兴地开始要设定不同 sidebar 的时候,突然惊觉在 WordPress Widget 系统里面,除了 text 和 RSS widget 以外,其他的 widget 只能出现一次,如果把它放在 Sidebar 1 就不能放在 Sidebar 2;原先的设计可能没有考虑到我上面讲的那种用法吧,可能只有考虑到三栏式设计 (其中两栏设为 sidebar),在这种情况下确实是不会有重复出现的需求 (不会有人想在同一页看到两个日历吧 ?) 为了解决这问题,我又开始到处翻数据,找到前人写的一个 plugin JAW Duplicate Widgets,可以任意 copy widget (不过好像不是每种 widget 都可以 copy 成功),这样我的问题就解决掉大部份啦
(然而……我发现我安装了JAW Duplicate Widgets之后却不能用。好吧……我只好去找更多的Widget。反正Wordpress中拥有相同功能的不同Widget多得是,想不重复也容易。)
好吧,终于完成了。赞叹一下我的曲折过程吧。


你怎么用了一个.us 的域名…… 域名和空间是在哪申请的啊。主题风格感觉蛮淡雅的,呵呵。另外,你找到了导入歪酷日志的方法没?……
[回复]
跟rexcel有关的其他域名都被注册了……在国外的name.com申请的。歪酷的日志还是没有好办法,最后用一个叫blogbak的软件备份下来的,却不能备份评论。
[回复]
哪儿有计数器的插件呢,就是可以查看pv数的~
[回复]
没找呢……
[回复]
ms主页上么有留言板啊~
[回复]
正考虑要不要放。
[回复]
哇,戈老大的网站感觉不错啊~
[回复]
刚刚起步,不敢当啊啊
[回复]
还没考虑过这问题,以后真用到就照你的方法做吧。。
[回复]
使用is_home() 感觉会减慢打开速度,当然是感觉。。
放个留言板吧,再是字体颜色是不是弄那么一点点,好淡,刺激眼睛啊
[回复]
嗯……我觉得还好啊。可能是不同的显示器效果不同。
[回复]
I want to say, that I really love your blog.
Please go on like that and don’t stop posting. I hope this comment motivates you to do so, smile
regards, kali
[回复]
Widget选项下面会多出一个widget logic的框框
我的怎么不出现 ?
[回复]
@Rubinz, 我之所以提供了那么多种方法……就是因为对于不同的模板而言,有些方法可能不可用啊
[回复]