WordPress offers no way out of the box to grab your sidebar widget settings and use them somewhere else in your site. Here’s a function to allow you to do it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | /** * Find a given widget in a given sidebar and return its settings. * * Example usage: * $options = []; * try { * $options = get_sidebar_widget_options('sidebar-1', 'recent-comments'); * } catch (Exception $e) {} * * @param $sidebar_id The ID of the sidebar. Defined in your register_sidebar() call * @param $widget_type Widget type specified in register_sidebar() * @return array Saved options * @throws Exception "Widget not found in sidebar" or "Widget has no saved options" */ function get_sidebar_widget_options($sidebar_id, $widget_type) { // Grab the list of sidebars and their widgets $sidebars = wp_get_sidebars_widgets(); // Just grab the widgets for our sidebar $widgets = $sidebars[$sidebar_id]; // Get the ID of our widget in this sidebar $widget_id = 0; foreach ( $widgets as $widget_details ) { // $widget_details is of the format $widget_type-$id - we just want the id part if ( preg_match("/^{$widget_type}\-(?P<id>\d+)$/", $widget_details, $matches) ) { $widget_id = $matches['id']; break; } } // If we didn't find the given widget in the given sidebar, throw an error if ( !$widget_id ) throw new Exception("Widget not found in sidebar"); // Grab the options of each instance of our $widget_type from the DB $options = get_option('widget_' . $widget_type); // Ensure there are settings to return if ( !isset($options[$widget_id]) ) throw new Exception("Widget has no saved options"); // Grab the settings $widget_options = $options[$widget_id]; return $widget_options; } |
Drop the function in your functions.php. Note that it will find the first occurrence of your given widget in the given sidebar and return its settings.