built-in facet type
Custom facet types
You can create your own facet types with FacetWP.
Here’s an example plugin that lets users filter by Future
or Past
date:
View the code
https://github.com/FacetWP/facet-future-past
Anatomy of a facet type
Each facet type consists of 2 main parts:
- The facet class
- The facet registration (using the facetwp_facet_types hook)
The facet class
Each facet type inherits from the FacetWP_Facet
class and contains most (if not all) of these methods:
Method | Purpose |
---|---|
__construct() | Set the facet type’s label and (optional) settings fields |
load_values( $params ) | (optional) Pulls facet choices from the database. Not all facet types (e.g. number range) use this method. The returned data is passed into render() via $params['values'] |
render( $params ) | Generates the HTML output |
filter_posts( $params ) | Returns an array of post IDs that match the selected values for this facet |
admin_scripts() | Outputs custom scripts or CSS for the admin settings page |
front_scripts() | Outputs custom scripts or CSS for front-facing facet pages |
register_fields()
|
(optional) Add custom settings fields |
The above (GitHub) example uses all of the above methods, except for admin_scripts
.
Registering the facet type
Here’s how we’re registering the future_past
facet type:
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_facet_types', function( $types ) { include( dirname( __FILE__ ) . '/facet-future-past/class-facet.php' ); $types['future_past'] = new FacetWP_Facet_Future_Past(); return $types; });