-
-
Save kingkool68/3418186 to your computer and use it in GitHub Desktop.
<?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; | |
} |
One typo though, in rh_get_widget_data_for()
:
$sibebar_id = false;
should be
$sidebar_id = false;
Cool! unfortunately the page with the widgets hasn't the customizer (with the widgets) available, this is because the widget are display with the function.. there is a way to work around this?
Many thanks man!
;-)
Great functions! Saved me some time in a tight schedule. Thanks for sharing.
@EdisonSM Thanks for leaving a comment!
+1, Working
Could someone explain how to use it pls? I am getting an empty array :(
@mehmet-demir When you register a sidebar, you give it a name like Footer
. See https://developer.wordpress.org/reference/functions/register_sidebar/
To get all of the raw widget data for the Footer
sidebar, do rh_get_widget_data_for( 'Footer' );
which will give you an array of widget data.
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;
@jamesfacts You're welcome. Thanks for spotting the typo. You rock!
you rock! 👍