Skip to content

Instantly share code, notes, and snippets.

@kingkool68
Last active February 15, 2021 03:51
Show Gist options
  • Save kingkool68/3418186 to your computer and use it in GitHub Desktop.
Save kingkool68/3418186 to your computer and use it in GitHub Desktop.
WordPress function to get raw widget data for all of the widgets in a given sidebar
<?php
function rh_get_widget_data_for_all_sidebars() {
global $wp_registered_sidebars;
$output = array();
foreach ( $wp_registered_sidebars as $sidebar ) {
if ( empty( $sidebar['name'] ) ) {
continue;
}
$sidebar_name = $sidebar['name'];
$output[ $sidebar_name ] = rh_get_widget_data_for( $sidebar_name );
}
return $output;
}
<?php
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
$sidebar_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;
}
@jamesfacts
Copy link

Thanks so much for this! I do see a tiny typo: https://gist.github.com/kingkool68/3418186#file-rh-get-widget-data-for-php-L9

Probably should be $sidebar_id = false;

@kingkool68
Copy link
Author

@jamesfacts You're welcome. Thanks for spotting the typo. You rock!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment