• TECHN

    Posted on 四月 24th, 2009

    Written by 戈城

    Tags

    , , ,

    昨天折腾了一天,只因为我不希望所有的页面都显示相同的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的帮助信息修改模板即可。

    此处不再赘述,给出作者链接:

    http://dupola.com/post/65

    我承认这显然是个很好用的东东,但当我运行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多得是,想不重复也容易。)

    好吧,终于完成了。赞叹一下我的曲折过程吧。


    509 阅读
    博客故障记»下一篇


    分享到饭否   

    本日志发表于星期五, 四月 24th, 2009 at 14:27,属于分类TECHN
    你可以通过RSS 2.0对这篇日志进行回复。
    你可以回复日志, 或者从自己的页面引用
  • 14 评论

    看看有啥想说的。

    1. Posted on 四月 24th

      你怎么用了一个.us 的域名…… 域名和空间是在哪申请的啊。主题风格感觉蛮淡雅的,呵呵。另外,你找到了导入歪酷日志的方法没?……

      [回复]

        戈城回复:

      跟rexcel有关的其他域名都被注册了……在国外的name.com申请的。歪酷的日志还是没有好办法,最后用一个叫blogbak的软件备份下来的,却不能备份评论。

      [回复]

    2. Posted on 四月 25th

      哪儿有计数器的插件呢,就是可以查看pv数的~

      [回复]

        戈城回复:

      没找呢……

      [回复]

    3. Posted on 四月 25th

      ms主页上么有留言板啊~

      [回复]

        戈城回复:

      正考虑要不要放。

      [回复]

    4. Posted on 四月 27th

      哇,戈老大的网站感觉不错啊~

      [回复]

        戈城回复:

      刚刚起步,不敢当啊啊

      [回复]

    5. Posted on 四月 29th

      还没考虑过这问题,以后真用到就照你的方法做吧。。

      [回复]

    6. Posted on 四月 29th

      使用is_home() 感觉会减慢打开速度,当然是感觉。。

      放个留言板吧,再是字体颜色是不是弄那么一点点,好淡,刺激眼睛啊

      [回复]

        戈城回复:

      嗯……我觉得还好啊。可能是不同的显示器效果不同。

      [回复]

    7. Posted on 五月 23rd

      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

      [回复]

    8. Posted on 九月 23rd

      Widget选项下面会多出一个widget logic的框框
      我的怎么不出现 ?

      [回复]

        戈城回复:

      @Rubinz, 我之所以提供了那么多种方法……就是因为对于不同的模板而言,有些方法可能不可用啊

      [回复]

  • 发表评论

    告诉我你在想什么。

  • Name:

    Email (required):

    Website:

    Message: