I am currently using a loop that goes trough all sidebars looking for widgets than loop those again in order to get all widgets options.
Doing this on
add_filter('sidebars_widgets', array($this, 'sidebars_widgets'));
filter and it just does not seem right that I need to loop this much just to get all options
I took this example from display widgets plugin and it just does not seem right
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;
}
would you know a better , faster way to do this ?