我目前正在使用一个循环,通过所有侧栏查找小部件,而不是再次循环这些小部件,以获得所有小部件选项。
在上执行此操作
add_filter(\'sidebars_widgets\', array($this, \'sidebars_widgets\'));
过滤器,我需要循环这么多来获取所有选项,这似乎并不正确
我从DisplayWidgets插件中选取了这个示例,但它似乎并不正确
function sidebars_widgets($sidebars) {
if ( is_admin() ) {
return $sidebars;
}
global $wp_registered_widgets;
foreach ( $sidebars as $s => $sidebar ) {
if ( $s == \'wp_inactive_widgets\' || strpos($s, \'orphaned_widgets\') === 0 || empty($sidebar) ) {
continue;
}
foreach ( $sidebar as $w => $widget ) {
// $widget is the id of the widget
if ( !isset($wp_registered_widgets[$widget]) ) {
continue;
}
$opts = $wp_registered_widgets[$widget];
$id_base = is_array($opts[\'callback\']) ? $opts[\'callback\'][0]->id_base : $opts[\'callback\'];
if ( !$id_base ) {
continue;
}
$instance = get_option(\'widget_\' . $id_base);
if ( !$instance || !is_array($instance) ) {
continue;
}
if ( isset($instance[\'_multiwidget\']) && $instance[\'_multiwidget\'] ) {
$number = $opts[\'params\'][0][\'number\'];
if ( !isset($instance[$number]) ) {
continue;
}
$instance = $instance[$number];
unset($number);
}
unset($opts);
print_r($instance);// here they are
unset($widget);
}
unset($sidebar);
}
return $sidebars;
}
你知道更好更快的方法吗?
最合适的回答,由SO网友:Nicolai Grossherr 整理而成
对我来说,这实际上似乎是一种相当合理的方法。
循环通过它并没有什么错,有时它是唯一/最快的方式。
我不知道你是怎么得到侧边栏的
$sidebars_widgets = get_option( \'sidebars_widgets\' );
可以使用。它为您提供了一个关联数组,其中包含每个侧栏的小部件列表和所有非活动小部件的列表。