RSS

让Wordpress模板支持Sidebar Widgets

2007年10月14日 | ghSky | 浏览: 1,290   

My Own Site

早就想搞了,一直没时间,刚好今天上网搜了篇文章看看
原文来自:http://www.digglife.cn/articles/sidebar-widgets-support.html

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

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

1.两栏模板(侧栏只有一列)

  1. < ?php  
  2. if ( function_exists('register_sidebar') )  
  3.     register_sidebar(array(  
  4.         'before_widget' => '<li>',    // #1  
  5.         'after_widget' => '</li>',     // #2  
  6.         'before_title' => '<h2>',      // #3  
  7.         'after_title' => '</h2>',       // #4  
  8.     ));  
  9. ?>

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

  1. <div id="sidebar_r">  //右栏模块  
  2. <ul>  
  3. <li>    //Widgets前标识  
  4. <h2><?php _e('Archives'); ?></h2>    //Widgets标题  
  5.     <ul>  
  6.     <?php wp_get_archives('type=monthly'); ?>  
  7.     </ul>  
  8. </li>      //  widgets后标识  
  9. ......  
  10. </ul>  
  11. </div>
  12. 所以我应该在#1和#2语句中的' '内填入分别填入<li>和</li>,#3和#4语句中的' '内填入<h2>和</h2>.

2.三栏模板(侧栏有两列)

通常情况下,三栏模板的functions.php可以按照如下代码定义:

  1. <?php  
  2. if ( function_exists('register_sidebar') )  
  3.     register_sidebar(array(  
  4.         'name' => 'Left Sidebar',         //#5          
  5.         'before_widget' => '<li>',   
  6.         'after_widget' => '</li>',   
  7.         'before_title' => '<h2>',  
  8.         'after_title' => '</h2>',  
  9.     ));   
  10.  
  11. if ( function_exists('register_sidebar') )  
  12.     register_sidebar(array(  
  13.         'name' => 'Right Sidebar',      //#6  
  14.         'before_widget' => '<li>',   
  15.         'after_widget' => '</li>',   
  16.         'before_title' => '<h2>',  
  17.         'after_title' => '</h2>',  
  18.     ));   
  19. ?>

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

三.Sidebar.php文件的修改.
functions.php改好之后,sidebar.php就非常之简单了.我们只需在合适的地方加上下面这段代码:

  1. <?php if ( function_exists('dynamic_sidebar') && dynamic_sidebar('#7') ) : else : ?>   
  2. <?php endif; ?>

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

以我的右栏为例:

  1. <div id="sidebar_r">  //右栏模块  
  2. <ul>  
  3. #8  
  4. <li>    //Widgets前标识  
  5. <h2><?php _e('Archives'); ?></h2>    //Widgets标题  
  6.     <ul>  
  7.     <?php wp_get_archives('type=monthly'); ?>  
  8.     </ul>  
  9. </li>      //  widgets后标识  
  10. ......(更多模板默认的widgets)  
  11. #9  
  12. </ul><ul>  
  13. </ul></div>

如果你想保留默认的sidebar定义,在#8处加上上述代码的第一行,在#9处添加第二行即可.如果你不再需要默认的sidebar定义,可以将他们全部删除,直接加上上面的代码(推荐).

两栏模板只需添加一次,三栏模板需要给左右两列各添加一次,当然要对应functions.php中各自的name.

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

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

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

2 Comments For This Post

  1. Gravatar Xiami Says:

    好文,放到我挖网( digbuzz.com , 最大的中文 Digg)挖一挖会不错,还可给你带来大量流量!

  2. Gravatar ghSky Says:

    哈,真是感谢咯!!!

Leave a Reply

:smile: :arrow: :biggrin: :rolleyes: :mad: :question: :twisted: :neutral: :wink: :sad: :surprised: :confused: :razz: :evil: :eek: :mrgreen: :idea: :redface: :cry: :exclaim: :cool: :lol:

   [完成后按 Ctrl+Enter 发布]