Overview

FacetWP Sort facet dropdown exampleThis hook lets you customize the Sort facet’s dropdown options and sort logic.

Parameters

  • $options | array | Options array (see below)
  • $params | array | Associative array of extra input variables (see below)

The $options array contains an array of settings for each sort option that is set in the Sort facet’s settings. This example has two sort options:

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

$options = [ 'title_asc' => [ 'label' => 'Title (a-z)', 'query_args' => [ 'orderby' => [ 'title' => 'ASC' ] ] ], 'title_desc' => [ 'label' => 'Title (z-a)', 'query_args' => [ 'orderby' => [ 'title' => 'DESC' ] ] ], //... ];

The $params array provides the Sort facet’s settings, and the listing template’s name:

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

$params = [ 'facet' => [ 'name' => 'my_sort_facet_name', 'label' => 'My sort facet label', 'type' => 'sort', 'default_label' => 'Sort by', 'sort_options' => [ [ 'label' => 'Title (a-z)', 'name' => 'title_a_z', 'orderby' => [ 'key' => 'title', 'order' => 'ASC', 'type' => 'CHAR', ], ], [ 'label' => 'Title (z-a)', 'name' => 'title_z_a', 'orderby' => [ 'key' => 'title', 'order' => 'DESC', 'type' => 'CHAR', ] ], //... ], 'operator' => 'or', 'selected_values' => [ 'the_selected_sort_value' ] ], 'template_name' => 'my_template_name' ];

Usage

A few examples of how to use this hook:

Remove a sort option

The following code removes the sort option with the name title_z_a:

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_sort_options', function( $options, $params ) { unset( $options['title_z_a'] ); return $options; }, 10, 2 );

Remove a sort option conditionally

The following code removes the sort option with the name date, if the template name is cars:

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_sort_options', function( $options, $params ) { if ( 'cars' == $params['template_name'] ) { unset( $options['date'] ); } return $options; }, 10, 2 );

Or, alternatively, use the Sort facet’s name as condition:

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_sort_options', function( $options, $params ) { if ( 'my_sort_facet' == $params['facet']['name'] ) { unset( $options['date'] ); } return $options; }, 10, 2 );

Add a sort option conditionally

The following code adds a sort option if the template name is my_listing. You can use any orderby parameter accepted by WP_Query. In this example we add an option to sort by post 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_sort_options', function( $options, $params ) { if ( 'my_listing' == $params['template_name'] ) { $options['post_type'] = [ 'label' => 'Post type', 'query_args' => [ 'orderby' => [ 'type' => 'ASC' ] ] ]; } return $options; }, 10, 2 );

Add an option to sort by multiple (custom) fields

The following example adds a “Price (Highest)” sort option. First it sorts by a custom field with the name _price, from high to low. This custom field is a numeric field with decimals.

The new option also has a backup sorting method. Items with the same price will be sorted by post title:

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_sort_options', function( $options, $params ) { $options['price_desc'] = [ 'label' => 'Price (Highest)', 'query_args' => [ 'meta_query' => [ 'sort_0' => [ 'key' => '_price', 'type' => 'DECIMAL(16,4)', ] ], 'orderby'=> [ 'sort_0' => 'DESC', 'title' => 'ASC' ] ] ]; return $options; }, 10, 2 );

This above added sort option is equivalent to adding it like this in the Sort facet’s settings:

Sort facet option: sort by a price custom field and then post title.
Sort facet option: sort by a custom field and then by post title.

More examples

See also