Hooks & Alter Functions
When to Use
Use hooks when you need to programmatically modify BEF behavior — changing options, setting slider ranges dynamically, or altering widget availability — without creating a custom widget plugin.
Decision
| Hook | Purpose |
|---|---|
hook_better_exposed_filters_options_alter() |
Alter BEF options before form build (slider range, per-view config overrides) |
better_exposed_filters_better_exposed_filters_{type}_widget_info_alter |
Add/remove/modify widget plugin definitions |
Pattern
/**
* Implements hook_better_exposed_filters_options_alter().
*/
function my_module_better_exposed_filters_options_alter(
array &$options,
ViewExecutable $view,
DisplayPluginBase $displayHandler
): void {
// Set dynamic slider min/max based on content.
if ($view->id() === 'products' && $view->current_display === 'page_1') {
$options['filter']['field_price_value']['slider_options']['bef_slider_min'] = 500;
$options['filter']['field_price_value']['slider_options']['bef_slider_max'] = 5000;
}
}
/**
* Alter filter widget plugin definitions.
*/
function my_module_better_exposed_filters_better_exposed_filters_filter_widget_info_alter(
&$definitions
): void {
unset($definitions['bef_sliders']); // Remove a widget
$definitions['bef']['class'] = 'Drupal\my_module\...\EnhancedRadioButtons';
}
// Replace 'filter' with 'sort' or 'pager' for those types.
The better_exposed_filters_options alter hook is also invoked at the theme level — themes can modify BEF behavior without a custom module.
Common Mistakes
- Wrong: Using
hook_better_exposed_filters_alteras the hook name → Right: The hook ishook_better_exposed_filters_options_alter. - Wrong: Setting
$options['field_price_value']directly → Right: The nested path is$options['filter']['field_name']['config_key']. Check the exact key path.
See Also
- Custom Widget Plugins
- Sliders Widget
- Reference:
web/modules/contrib/better_exposed_filters/better_exposed_filters.api.php