How to combine facet choices
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
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.