Wie kann ich die Anzahl der Widgets ermitteln, die in einer bestimmten Seitenleiste aktiv sind? Gibt es dafür eine Kernfunktion?
Ich möchte jedem Widget in einer Seitenleiste eine Klasse hinzufügen, basierend auf der Anzahl der angezeigten Widgets.
Vielen Dank.
Nach einigen Recherchen und basierend auf der Antwort von Eugene Manuilov habe ich eine Funktion erstellt, die Widgets in einer bestimmten Seitenleiste (in meinem Fall "Seitenleisten-unten") benutzerdefinierte Klassen hinzufügt, basierend auf der Anzahl der in dieser Seitenleiste festgelegten Widgets. Dies eignet sich perfekt für horizontale Seitenleisten und auf Twitter-Bootstrap basierende Designs, für die die spanX-Klasse erforderlich ist, 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 das erste und das letzte Widget bearbeiten möchten, können Sie den folgenden Code verwenden. Ich nahm den Code von nautilus7 und kombinierte ihn mit MathSmath + durins Code unter http://wordpress.org/support/topic/how-to-first-and-last-css-classes-for-sidebar-widgets to Eine bestimmte Seitenleiste als Ziel festlegen, Bereichsklassen basierend auf der Anzahl der Widgets in der Seitenleiste hinzufügen und dann eine benutzerdefinierte Klasse zum ersten und letzten Widget der Gruppen hinzufügen.
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 folgendem 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' => '<h3 class="widget_title">',
'after_title' => '</h3>',
'before_widget' => '<div class="'.$sidebar_class.'"><div id="%1$s" class="widget %2$s" >',
'after_widget' => '</div></div>'
)
);
}
add_action('widgets_init','sidebar_widget_init');