Anzahl der Widgets in der Seitenleiste abrufen

Wie kann ich die Anzahl der Widgets ermitteln, die in einer bestimmten Sidebar aktiv sind? Gibt es dafür eine corefunktion?

Ich möchte eine class zu jedem Widget in einer Seitenleiste hinzufügen, abhängig davon, wie viele davon angezeigt werden.

Vielen Dank.

Solutions Collecting From Web of "Anzahl der Widgets in der Seitenleiste abrufen"

Nach einigen Recherchen und basierend auf der Antwort von Eugene Manuilov habe ich eine function erstellt, die Widgets in einer bestimmten Sidebar (in meinem Fall “sidebar-bottom”) basierend auf der Anzahl der Widgets in dieser Sidebar benutzerdefinierte classn hinzufügt. Dies wird perfekt in horizontalen Sidebars und Themes passen, die auf Twitter-Bootstrap basieren und die spanX-class benötigen, um die Breite des Elements anzupassen.

function cosmos_bottom_sidebar_params($params) { $sidebar_id = $params[0]['id']; if ( $sidebar_id == 'sidebar-bottom' ) { $total_widgets = wp_get_sidebars_widgets(); $sidebar_widgets = count($total_widgets[$sidebar_id]); $params[0]['before_widget'] = str_replace('class="', 'class="span' . floor(12 / $sidebar_widgets) . ' ', $params[0]['before_widget']); } return $params; } add_filter('dynamic_sidebar_params','cosmos_bottom_sidebar_params'); 

Wenn Sie mit dem ersten und letzten Widget arbeiten möchten, können Sie den folgenden Code verwenden. Ich nahm den Code von nautilus7 und kombinierte ihn mit MathSmath + durins Code über http://wordpress.org/support/topic/how-to-first-and-last-css-classes-for-sidebar-widgets , um eine bestimmte Sidebar anzusprechen Fügen Sie Spannungsklassen basierend auf der Anzahl der Widgets in der Seitenleiste hinzu und fügen Sie dann eine benutzerdefinierte class zum ersten und letzten Widget der Gruppen hinzu.

 function cur_target_sidebar_add_classes_to_params($params) { global $my_widget_num; // Global a counter array $sidebar_id = $params[0]['id']; if ( $sidebar_id == 'sidebar' ) { $registered_widgets = wp_get_sidebars_widgets(); if(!isset($registered_widgets[$sidebar_id]) || !is_array($registered_widgets[$sidebar_id])) { // Check if the current sidebar has no widgets return $params; // No widgets in this sidebar... bail early. } $number_of_widgets = count($registered_widgets[$sidebar_id]); $rounded_number_of_widgets = floor(12 / $number_of_widgets); //Rounds number of widgets down to a whole number if(!$my_widget_num) {// If the counter array doesn't exist, create it $my_widget_num = array(); } if(isset($my_widget_num[$sidebar_id])) { // See if the counter array has an entry for this sidebar $my_widget_num[$sidebar_id] ++; } else { // If not, create it starting with 1 $my_widget_num[$sidebar_id] = 1; } $classes = 'span' . $rounded_number_of_widgets; if($my_widget_num[$sidebar_id] == 1) { // If this is the first widget $classes .= ' first-widget '; } elseif($my_widget_num[$sidebar_id] == count($registered_widgets[$sidebar_id])) { // If this is the last widget $classes .= ' last-widget '; } $params[0]['before_widget'] = preg_replace('/class=\"/', 'class="' . $classes . ' ', $params[0]['before_widget'], 1); } return $params; } add_filter('dynamic_sidebar_params','cur_target_sidebar_add_classes_to_params'); 
 function wpse_54162_get_widgets_count( $sidebar_index ) { global $wp_registered_sidebars; $index = "sidebar-{$sidebar_index}"; $sidebars_widgets = wp_get_sidebars_widgets(); if ( empty($wp_registered_sidebars[$index]) || !array_key_exists($index, $sidebars_widgets) || !is_array($sidebars_widgets[$index]) || empty($sidebars_widgets[$index]) ) return 0; return count( (array) $sidebars_widgets[$index] ); } 

Versuchen wir es mit dem folgenden Code

 function sidebar_widget_init() { global $_wp_sidebars_widgets; if ( empty( $_wp_sidebars_widgets ) ) : $_wp_sidebars_widgets = get_option( 'sidebars_widgets', array() ); endif; $sidebars_widgets_count = $_wp_sidebars_widgets; $sidebar_count = count( $sidebars_widgets_count[ 'sidebar3' ] ); if($sidebar_count == 2){ $sidebar_class = 'class_name1'; } elseif($sidebar_count == 3){ $sidebar_class = 'class_name2'; } elseif($sidebar_count == 4){ $sidebar_class = 'class_name3'; } register_sidebar(array( 'name' => __( 'Sidebar Footer', 'templatemesh' ), 'id' => 'sidebar3', 'description' => __( 'Widgets in this area will be shown on footer Sidebar.', 'templatemesh' ), 'before_title' => '

', 'after_title' => '

', 'before_widget' => '
', 'after_widget' => '
' ) ); } add_action('widgets_init','sidebar_widget_init');