首页 > 博客研究 > 如何让WordPress模板支持Sidebar Widgets(侧边栏插件)

如何让WordPress模板支持Sidebar Widgets(侧边栏插件)

wordpress-logo-cristal 昨天研究了一下Wordpress的模板修改,主要是为了给一个不支持自定义侧边栏的三栏模板加入这个简单方便的功能.其实我是一个PHP文盲,对Wordpress模板的修改也并没有深刻的了解,下面是作为一个门外汉研究心得,只讨论实现方法,并不深究原因,没有多大的技术含量,希望高手不要见笑.

一.有关侧边栏的两个重要文件

侧边栏所涉及到的主要集中在这两个文件上,我的理解是,sidebar.php负责侧边栏的显示内容,fuctions.php在这里则负责侧边栏如何显示.一个不支持侧边栏插件的模板没有functions.php这个文件,sidebar.php中也没有调用语句.

二.Functions.php文件修改.

为了让模板支持侧边栏插件,首先需要新建一个functions.php文件,然后添加一些代码.我参考了一些文章和许多模板代码之后,发现三栏和两栏的fuctions.php代码在细节上有些区别,为了更加清除地说明,下面分两种情况讨论(我靠,怎么像做数学啊): 1.两栏模板(侧栏只有一列)
[sourcecode language='php']

< ?php if ( function_exists('register_sidebar') ) register_sidebar(array(
'before_widget' => ‘

  • ‘, // #1
    ‘after_widget’ => ‘
  • ‘, // #2
    ‘before_title’ => ‘

    ‘, // #3
    ‘after_title’ => ‘

    ‘, // #4
    ));?>
    [/sourcecode]

    其中#1和#2是定义Widget内容前后标识符的语句,#3和#4是定义Widget标题的标识符的语句.根据模板的具体情况而定,你可以参考sidebar.php中已经定义过的侧边栏来决定应该采用哪种标识符.比如我修改的那个模板的sidebar.php中:
    [sourcecode language='php']

    [/sourcecode]
    所以我应该在#1和#2语句中的’ ‘内填入分别填入<li>和</li>,#3和#4语句中的’ ‘内填入<h2>和</h2>.

    2.三栏模板(侧栏有两列) 通常情况下,三栏模板的functions.php可以按照如下代码定义:
    [sourcecode language='php']
    < ?php if ( function_exists('register_sidebar') ) register_sidebar(array(
    'name' => ‘Left Sidebar’, //#5
    ‘before_widget’ => ‘

  • ‘,
    ‘after_widget’ => ‘
  • ‘,
    ‘before_title’ => ‘

    ‘,
    ‘after_title’ => ‘

    ‘,
    ));

    if ( function_exists(‘register_sidebar’) ) register_sidebar(array(
    ‘name’ => ‘Right Sidebar’, //#6
    ‘before_widget’ => ‘

  • ‘,
    ‘after_widget’ => ‘
  • ‘,
    ‘before_title’ => ‘

    ‘,
    ‘after_title’ => ‘

    ‘,
    )); ?>
    [/sourcecode]

    不要看代码很长,其实还是很简单.因为侧栏有两列,所以代码自然比单列的两栏模板多出一段,而且几乎一样.区别只在#5和#6两处的name,所谓name就是给widget指定各自的名称,以便在sidebar.php中分别调用.所以你只需要给这两个widget取两个自己认得的名字就好了.

    三.Sidebar.php文件的修改.

    functions.php改好之后,sidebar.php就非常之简单了.我们只需在合适的地方加上下面这段代码:
    [sourcecode language='php']

    < ?php if ( function_exists('dynamic_sidebar') && dynamic_sidebar('#7') ) : else : ?>

    < ?php endif; ?>

    [/sourcecode]

    其中<strong>#7</strong>为widgets的名称,对应name属性的值(#5和#6).

    <strong>以我的右栏为例:</strong>
    [sourcecode language='php']

    [/sourcecode]

    如果你想保留默认的sidebar定义,在#8处加上上述代码的第一行,在#9处添加第二行即可.如果你不再需要默认的sidebar定义,可以将他们全部删除,直接加上上面的代码(推荐). 两栏模板只需添加一次,三栏模板需要给左右两列各添加一次,当然要对应functions.php中各自的name.

    四.总结

    1.模板不同,代码会有差别,请根据模板的情况决定代码.

    2.上面这些我试验过多次,证明是可行的而且也是简单的,如果有什么错误的地方,请在留言中指出,谢谢.

    3.参考:CrystownWordPress Widget研究(一)

    11 Comments:

    1. 看到模板这些代码头就大了。还是用人家已做好的模板。

      ——–
      摩摩诘:
      其实我对这些代码的深刻含义也不懂…
      只求达到效果,呵呵

    2. 呵呵,特意从抓瞎过来赞一个! :D

      ——–
      呵呵,谢谢支持…

    3. 霸王硬上弓啊…

      ——-
      摩摩诘:
      哈哈,我霸王硬上弓也不是一回两回了~~~

    4. 还是要到这里看才行啊,抓虾里竟是空白的框框了 :cry:

      赞一下digg的研究精神,yo2应该没有必要去改这个吧

      ——-
      摩摩诘:
      Yo2也有好多模板不支持侧边栏的…

    5. 想知道怎么才能支持那种能拖动的侧边栏啊

    6. 根据您的方法修改成功 谢谢!

    7. 成功修改,很喜欢你的博客,可不可以交换一下链接:http://www.xiuxiusa.com/blog

    8. 唉,太笨了,还是没修改成功。

    9. 请问下,如果我用了这个网站的模板,我还能进行修改么?
      我刚在用72松的wp,刚接触,有很多不懂
      谢谢~

    10. 您好,我想询问一下,

      贵站是怎样实现不同的页面显示不同的sidebar

      我想让首页显示“友情链接”,文章内容页不显示“友情链接”,增加页面的权重

    Post a Comment

    *为必填项目,方便称呼和联系

    *

    *