我有两个侧边栏使用register_sidebars
将每个小部件显示为一个列表项的函数,该列表项的类为.box
:
<?php if(function_exists(\'register_sidebars\')){
register_sidebars(2, array(
\'name\'=>\'sidebar%d\',
\'id\' =>\'sidebar\',
\'before_widget\'=>\'<li class="box">\',
\'after_widget\'=>\'</li><!--box--><!--aside-->\',
\'before_title\'=>\'<h2>\',
\'after_title\'=>\'</h2>\',
));
}
?>
因此,输出如下:
<div class="side">
<ul>
<li class="box">
<div class="textwidget">Lorem ipsum</div>
</li><!--box--><!--aside-->
<li class="box">
<h2>Blogroll</h2>
<ul class="xoxo blogroll">
<li><a href="http://example.com">Example</a></li>
</ul>
</li><!--box--><!--aside-->
</ul>
</div>
我需要的是一个条件函数,以便任何链接小部件(或具有
.xoxo
) 在侧边栏中不会得到
.box
因为我想以不同的方式来设计这些样式,而且我可以从内部简单地更改某些样式
.box
. 主要的问题是,我不知道过滤器的目标函数或变量是什么。codex没有很好地对使用较少的全局变量进行分类,我在过滤器引用中看不到任何有帮助的内容。
最合适的回答,由SO网友:Iterate 整理而成
我用过滤器将自己的答案编码在一起dynamic_sidebar_params
:
<?php
add_filter(\'dynamic_sidebar_params\',\'io_blogroll_class\');
function io_blogroll_class($params){
$params[0][\'before_widget\'] = \'<li class="\'.$params[0][\'widget_name\'].\' box">\';
$params[0][\'after_widget\'] = \'</li><!--\'.$params[0][\'widget_name\'].\'-->\';
if ($params[0][\'widget_name\'] == "Links"){
$params[0][\'before_widget\'] = \'<li class="\'.$params[0][\'widget_name\'].\'">\';
$params[0][\'after_widget\'] = \'</li><!--\'.$params[0][\'widget_name\'].\'-->\';
}
return $params;
}
?>
第一行实际上覆盖了您编程的任何内容
register_sidebar()
或
register_sidebars()
在小部件前后放置。这样你就可以安全地在
register_sidebar()
如果您正在使用此代码。函数的第一行使小部件的名称(因此是类型)成为列表项的一个类,并给出一个默认类
.box
到所有小部件。这个
if
语句基本上是这样说的,“如果任何小部件都有类
.Links
(如果他们是blogroll或linklist,他们会这样做)更改这些小部件前后的XHTML列表项标记,以使用其小部件名称作为唯一的类。“”
我希望这段代码能帮助一些关注同样问题的人。