wordpress源代码研究-侧边栏的实现
wordpress的widget.中文的后台显示名称叫小工具。包括你自己添加自定义代码进去的文本工具。
有一些工具是主题自带的,有的些是你自己加的,或者说在你安装了某些插件之后插件为你加上的。这些所有用可用的插件,他们的信息都是保存在option表中的,我们都知道,在WP初始化的第一步(我前面的文章《wordpress源代码研究-前台运行流程》里有讲到),就把这些数据放到全局变量中了。所以在构造侧边栏的时候,基本流程就是读取这些数据,然后将我们选中的小工具显示出来。
具体是如何做的呢,数据的准备我们不说了,无非就是查库数据格式化。
我 们从第二步开始说,首先一个页面得到请求,他会调用到模板页去显示。而模板页面(index 或者single)他们除了有自己特殊的一些信息的展现代码之外,还包含了一些通用的模板(大模板中包含子模板)。比如header.footer.当然 还有我们今天的主角就是sidebar.然后这些小的模板又被包含,被激活。
我们的东西就在sidebar里面,我这个模板的定义是这样的。
1 2 3 4 | <div id="sidebar"> <ul> <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>; ....... |
就是说如果存在dynamic_sidebar这个函数的话,就调用这个函数,如果这个函数返回的是false(表明他没干成什么事,没有输出),那就执行下面的东西。
下面是什么呢?下面其实就是和上面这个dynamic单词对应的,static的东西了。就是说主题默认的几个widget。比如日历啊,搜索框啊什么的。
当然,我们怎么会没有dynamic_sidebar呢。这个函数就位于你的wp-includes/widgets.php里,搜一下就找到了。他就是整个widget的核心。
他得到我们选择好的widget列表,怎么得到?前面已经把数据准备好了,他读一下就OK了。
然 后再按图索骥,foreach每一个widget,得到他们的具体信息,这个具体信息是什么内容呢?最重要的内容就是有一个callback函数 及其参数。就是说这个widget要怎么怎么表现自己,就在这个widget的callback函数里写好了。最后就是在每个widget里调用这个 widget.带上他的参数。然后widget的HTML就出来了,输出,OK。打完收工。