lafif-a
9/30/2014 - 3:53 AM

[Wordpress] Display raw widget data

[Wordpress] Display raw widget data

function rh_get_widget_data_for($sidebar_name) {
	global $wp_registered_sidebars, $wp_registered_widgets;
	
	// Holds the final data to return
	$output = array();
	
	// Loop over all of the registered sidebars looking for the one with the same name as $sidebar_name
	$sibebar_id = false;
	foreach( $wp_registered_sidebars as $sidebar ) {
		if( $sidebar['name'] == $sidebar_name ) {
			// We now have the Sidebar ID, we can stop our loop and continue.
			$sidebar_id = $sidebar['id'];
			break;
		}
	}
	
	if( !$sidebar_id ) {
		// There is no sidebar registered with the name provided.
		return $output;
	} 
	
	// A nested array in the format $sidebar_id => array( 'widget_id-1', 'widget_id-2' ... );
	$sidebars_widgets = wp_get_sidebars_widgets();
	$widget_ids = $sidebars_widgets[$sidebar_id];
	
	if( !$widget_ids ) {
		// Without proper widget_ids we can't continue. 
		return array();
	}
	
	// Loop over each widget_id so we can fetch the data out of the wp_options table.
	foreach( $widget_ids as $id ) {
		// The name of the option in the database is the name of the widget class.  
		$option_name = $wp_registered_widgets[$id]['callback'][0]->option_name;
		
		// Widget data is stored as an associative array. To get the right data we need to get the right key which is stored in $wp_registered_widgets
		$key = $wp_registered_widgets[$id]['params'][0]['number'];
		
		$widget_data = get_option($option_name);
		
		// Add the widget data on to the end of the output array.
		$output[] = (object) $widget_data[$key];
	}
	
	return $output;
}