In some situations you may want to combine two or more facet choices into one choice. This can easily be achieved by using the facetwp_index_row indexing hook.

For example, let’s assume you have a facet with the name fruits which has a list of fruit types as choices. And you want to combine the Oranges, Grapefruits, and Lemons choices into one choice: Citrus Fruits. When this choice is selected, the result should be all posts that have Oranges, Grapefruits, and Lemons as taxonomy term or custom field value.

To accomplish this, add the following code to your (child) theme’s functions.php, and make sure to re-index afterward:

How to use custom PHP code?

PHP code can be added to your (child) theme's functions.php file. Alternatively, you can use the Custom Hooks add-on, or a code snippets plugin. More info

add_filter( 'facetwp_index_row', function( $params, $class ) { if ( 'fruits' == $params['facet_name'] ) { // Replace only 'fruits' with the name of your facet. Leave $params['facet_name'] intact! $val = $params['facet_value']; if ( 'oranges' == $val || 'grapefruits' == $val || 'lemons' == $val ) { // Replace 'oranges'/'grapefruits'/'lemons' with the facet choices to combine (we use the technical name here). Note that || means OR. $params['facet_value'] = 'citrus-fruits'; // Replace 'citrus-fruits' with the new facet_value (technical name/slug). Don't use spaces or special characters. $params['facet_display_value'] = 'Citrus Fruits'; // Replace 'Citrus Fruits' with the new facet choice's display name. } } return $params; }, 10, 2 );

Important to distinguish here is that each facet choice consists of two values that are indexed and stored in the index table. The facet_value is its technical name (“slug”) as it appears in the URL after filtering. The facet_display_value is the choice’s display value as it shows up in the facet itself in the front-end.

So in the above example, the facet_value of the newly created facet choice is citrus-fruits, which appears in the URL after selecting it. And its facet_display_value is Citrus Fruits, which appears as choice label in the facet.

Another thing to notice is that in line 3 of the above example, we are using facet_value to select the choices that will be combined. You could also use facet_display_value here, as it is available in the facetwp_index_row hook’s parameters.

Combining indexed dates

A Checkboxes facet to filter by month and year.
A Checkboxes facet to filter by month and year.

Using the same principle as explained above, you can combine indexed dates in facets that have a date field set as their Data Source. This can be the Post Date or any custom field that stores a date in the YYYY-MM-DD format, like an ACF Date Picker field.

These individually indexed dates can be combined to e.g. months and/or years to create a month/year facet. Or, by determining if the indexed date is in the past or future, to create a past/future facet.

See also

Last updated: January 8, 2025