The dynamic_sidebar_params
filter 在显示每个小部件之前调用,因此在同一侧栏中多次调用。它过滤$args
和$instance
将传递给小部件的参数。
如果您只想为特定侧栏的第三个小部件执行它,那么应该检查侧栏ID(在id
的值$args
数组),然后对小部件进行计数,直到到达n。有不同的方法可以做到这一点:您可以获取当前侧栏的所有小部件,并将其ID与您现在正在筛选的ID进行比较,或者您可以在过滤器中对其进行计数,在获得新侧栏名称时重置计数。或者你可以替换dynamic_sidebar()
在模板中调用自己的函数,该函数将首先重置小部件计数,然后开始过滤。
这是第二种类型的示例:计算函数中的小部件数量,每次启动新的侧栏时重置计数:
add_filter( \'dynamic_sidebar_params\', \'wpse15024_dynamic_sidebar_params\' );
function wpse15024_dynamic_sidebar_params( $params )
{
// These are the targets. Modify them here:
$targeted_sidebar = \'sidebar-bottom\';
$targeted_widget = (int) 3;
static $widget_counter = array();
static $current_sidebar = null;
$args = $params[0];
$instance = $params[1];
if ( $current_sidebar != $args[\'id\'] ) {
$current_sidebar = $args[\'id\'];
$widget_counter[$current_sidebar] = 0;
}
if ( $current_sidebar == $targeted_sidebar && $widget_counter[$current_sidebar] == $targeted_widget ) {
$args[\'before_widget\'] = \'<div id="\'.@$args[\'widget_id\'].\'" class="span-6 last">\';
}
$widget_counter[$current_sidebar]++;
return array( $args, $instance );
}