A-A+

is_active_sidebar参数使用name时不能正常判断

2014年04月13日 PHP开源系统 暂无评论 阅读 117 views 次

因为想自己改主题,所以这两天一直在研究别人的主题,我发现调用边栏时的代码是if(dynamic_sidebar('sidebarname)),通过代码发现该处if的作用仅仅只是想判断该边栏是否在使用中,然后执行if中的其他代码,但实际通过调试发现该处不仅做了判断,还会调用该边栏中的widgets.

于是去官方手册查看,果然,dynamic_sidebar是会在判断的同时调用边栏中的小工具,因为我对代码有洁癖,不希望程序执行我不需要的东西,于是又在手册中发现了is_active_sidebar,该函数仅仅只是判断边栏是否使用中并返回布尔类型,这正是我需要的,而且根据手册说明,该函数的参数可以是number(边栏索引)、边栏名和边栏ID,修改后整体代码如下:

register_sidebar(1, array('name'=> 'sidebarname', 'id' => 'sidebarid' ));

这里在functions.php中注册一个边栏,然后在小工具中随意拖动一个文本框工具进去以使边栏为active状态,然后在需要的地方判断:

if(is_active_sidebar('sidebarname')) {
//code
}

我以为大功告成,于是测试,发现并没有执行if中的语句,于是将参数改为number的值1(注:若注册边栏时没有填写number参数,wp会自动递增number,可在options表中options_name为sidebars_widgets的记录中查看到),如下,执行正常,

is_active_sidebar(1);

将参数改为sidebarid,即使用边栏ID,如下还是显示正常,

is_active_sidebar('sidebarid');

唯独使用边栏名时无法正常执行,于是去查看了dynamic_sidebar和is_active_sidebar两个函数的源代码,发现这两个函数在判断边栏是否active的方式不一样,也许这就是区别吧,也许还因为在option_name的值中只存储了number和边栏ID的原因吧,sidebarname存储到哪里去了呢?我也没去深看了,所以我觉得这应当是官方手册的一个失误了吧。

若其中我有什么错误被仔细的你发现了,请在下方留言告诉我!

标签:

给我留言