Find a widget’s current sidebar context
I recently was programming a widget for WordPress that needed to communicate with another widget if it was at a lower priority in the same sidebar. I came up with these nifty little functions to find the current context and sibling widgets of the current widget. You can add this to your functions.php.
function get_current_sidebar($widget_id) { $active_sidebars = wp_get_sidebars_widgets(); $current_sidebar = false; foreach($active_sidebars as $key => $sidebar) if(array_search($widget_id, $sidebar)) $current_sidebar = $key; return $current_sidebar; } function get_current_sidebar_widgets($sidebar_id){ $active_sidebars = wp_get_sidebars_widgets(); $current_sidebar_widgets = $active_sidebars[$sidebar_id]; return $current_sidebar_widgets; }
Add this method to your widget object:
protected function has_widget_siblings(){ $widget_id = $this->id_base.'-'.$this->number; $current_sidebar = get_current_sidebar($widget_id); $current_sidebar_widgets = get_current_sidebar_widgets($current_sidebar); $current_widget_identified = false; $current_widget_siblings = false; foreach($current_sidebar_widgets as $key => $widget){ if(preg_match("/{$widget_id}/", $widget)){ $current_widget_identified = true; } elseif(preg_match("/{$this->id_base}/", $widget)){ if($current_widget_identified) $current_widget_siblings = true; return $current_widget_siblings; } } }
Read my post about passing data between classes to have your widget communicate with a sibling widget.