Add Bootstrap 5 Classes to WordPress Widgets
After recently migrating from Bootstrap 4 to Bootstrap 5.3 I needed to have a way to make sure my sidebar widgets in WordPress had the same look and feel as my other Bootstrap 5.3 elements. After reviewing what I initially wrote about this in 2016 – I realized the solution is very similar to what I did for Bootstrap 4.
The end goal: Full widget dropdown with the arrow to the far right as seen in the screenshot below.
The solution is twofold:
- For the category widget we have the option to add in a class using a function in your theme’s functions.php file
- For all other dropdowns (archives, etc) you can simply add in some style into your theme’s stylesheet to make sure the select gets the same Bootstrap 5 style.
WordPress Category Widget Bootstrap 5 Code
Simply add this to the functions.php and it will make sure the category widget adds in the needed “form-select” class to the dropdown menu.
/** * Add CSS class to sidebar category selects. */ add_filter( 'widget_categories_dropdown_args', 'sdacinc_2025_widget_categories_dropdown_args' ); function sdacinc_2025_widget_categories_dropdown_args( $args ) { if ( array_key_exists( 'class', $args ) ) { $args['class'] .= ' form-select'; } else { $args['class'] = 'form-select'; } return $args; }
WordPress Widget Bootstrap 5 CSS Code
For all other dropdowns in the sidebar – we can add in this code (taken from the Bootstrap 5.3 CSS) to make sure the select is styled as all other selects in Bootstrap:
.widget select { --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); display: block; width: 100%; padding: 0.375rem 2.25rem 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: var(--bs-body-color); -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: var(--bs-body-bg); background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); background-repeat: no-repeat; background-position: right 0.75rem center; background-size: 16px 12px; border: var(--bs-border-width) solid var(--bs-border-color); border-radius: var(--bs-border-radius); transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }
I hope that helps you better style your WordPress widgets with Bootstrap 5 styles.