Skip to content

Instantly share code, notes, and snippets.

@srikat
Last active April 9, 2019 16:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save srikat/fc337b2fce3e451bcb7cc7dd002eddea to your computer and use it in GitHub Desktop.
Save srikat/fc337b2fce3e451bcb7cc7dd002eddea to your computer and use it in GitHub Desktop.
How to add first, last and numbered classes automatically to widgets in WordPress. http://sridharkatakam.com/add-first-last-numbered-classes-automatically-widgets-wordpress/
/**
* Add "first" and "last" CSS classes to dynamic sidebar widgets. Also adds numeric index class for each widget (widget-1, widget-2, etc.)
*/
function widget_first_last_classes( $params ) {
global $my_widget_num; // Global a counter array
$this_id = $params[0]['id']; // Get the id for the current sidebar we're processing
$arr_registered_widgets = wp_get_sidebars_widgets(); // Get an array of ALL registered widgets
if( !$my_widget_num ) {// If the counter array doesn't exist, create it
$my_widget_num = array();
}
// if( !isset( $arr_registered_widgets[$this_id] ) || !is_array( $arr_registered_widgets[$this_id] ) ) { // Check if the current sidebar has no widgets
// return $params; // No widgets in this sidebar... bail early.
// }
if( isset( $my_widget_num[$this_id] ) ) { // See if the counter array has an entry for this sidebar
$my_widget_num[$this_id] ++;
} else { // If not, create it starting with 1
$my_widget_num[$this_id] = 1;
}
$class = 'class="widget-' . $my_widget_num[$this_id] . ' '; // Add a widget number class for additional styling options
if( $my_widget_num[$this_id] == 1 ) { // If this is the first widget
$class .= 'widget-first ';
} elseif( $my_widget_num[$this_id] == count( $arr_registered_widgets[$this_id] ) ) { // If this is the last widget
$class .= 'widget-last ';
}
// $params[0]['before_widget'] = str_replace( 'class="', $class, $params[0]['before_widget'] ); // Insert our new classes into "before widget"
$params[0]['before_widget'] = preg_replace('/class=\"/', "$class", $params[0]['before_widget'], 1); // Insert our new classes into "before widget"
return $params;
}
add_filter( 'dynamic_sidebar_params', 'widget_first_last_classes' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment