Overview

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

Parameters

  • $options | array | Options array (see below)
  • $params | array | Associative array of extra input variables (see below)
$options = [
    'default' => [
        'label' => __( 'Sort by', 'fwp' ),
        'query_args' => []
    ],
    'title_asc' => [
        'label' => __( 'Title (A-Z)', 'fwp' ),
        'query_args' => [
            'orderby' => 'title',
            'order' => 'ASC',
        ]
    ],
    'title_desc' => [
        'label' => __( 'Title (Z-A)', 'fwp' ),
        'query_args' => [
            'orderby' => 'title',
            'order' => 'DESC',
        ]
    ],
    'date_desc' => [
        'label' => __( 'Date (Newest)', 'fwp' ),
        'query_args' => [
            'orderby' => 'date',
            'order' => 'DESC',
        ]
    ],
    'date_asc' => [
        'label' => __( 'Date (Oldest)', 'fwp' ),
        'query_args' => [
            'orderby' => 'date',
            'order' => 'ASC',
        ]
    ]
];

The $params array provides the template name, if needed.

$params = [
    'template_name' => 'default', 
];

Changing the default “Sort by”

In the above code, notice that the default sort’s query_args is empty.

The “Sort by” option is only a placeholder. When the “Sort by” option is active, it falls back to the query’s default sort. To change the default sort, you’ll need to change the query itself.

Usage

Example 1: Change the sort label

add_filter( 'facetwp_sort_options', function( $options, $params ) {
    $options['default']['label'] = 'My sort label';
    return $options;
}, 10, 2 );

Example 2: Remove the “Date (Oldest)” sort option

add_filter( 'facetwp_sort_options', function( $options, $params ) {
    unset( $options['date_asc'] );
    return $options;
}, 10, 2 );

Example 3: Remove the “Date (Oldest)” sort option only if the template is named cars

add_filter( 'facetwp_sort_options', function( $options, $params ) {
    if ( 'cars' == $params['template_name'] ) {
        unset( $options['date_asc'] );
    }
    return $options;
}, 10, 2 );

Example 4: Add a “Price (Highest)” sort option.

add_filter( 'facetwp_sort_options', function( $options, $params ) {
    $options['price_desc'] = [
        'label' => 'Price (Highest)',
        'query_args' => [
            'orderby' => 'meta_value_num',
            'meta_key' => '_price',
            'order' => 'DESC',
        ]
    ];
    return $options;
}, 10, 2 );

More examples

See also