Gists

7 months ago
add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
  
  if ( 'my_color_facet_name' == $facet['name'] ) { // Change 'my_color_facet_name' to the name of your facet. 
    
    $term_ids = get_terms( [
      'taxonomy' => 'pa_color', // Change 'pa_color' to the name of the attribute used in the Color facet's data source setting..
      'term_order' => true,
      'fields' => 'ids',
    ] );

    if ( ! empty( $term_ids ) && ! is_wp_error( $term_ids ) ) {
      $term_ids = implode( ',', $term_ids );
      $orderby = "FIELD(f.term_id, $term_ids)";
    }

  }
  return $orderby;
}, 10, 2 );
2 years ago
<?php
/**
 ** creates arbitrary values orderby string to sort facets
 ** in order of modifier values in include modifer setting of facet
 ** see https://facetwp.com/help-center/developers/hooks/querying-hooks/facetwp_facet_orderby/#sort-by-arbitrary-values
 **/

add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( 'my_categories' == $facet['name'] ) {
        if ( ! empty( $facet['modifier_values'] ) ) {
            $temp = preg_split( '/\r\n|\r|\n/', trim( $facet['modifier_values'] ) );
            $values = [];
            // Compare using both original and encoded values
            foreach ( $temp as $val ) {
                $val = trim( $val );
                $val_encoded = htmlentities( $val );
                $val_decoded = html_entity_decode( $val );
                $values[ $val ] = true;
                $values[ $val_encoded ] = true;
                $values[ $val_decoded ] = true;
            }
            $values = implode( '","', array_keys( $values ) );            
            $orderby = 'FIELD(f.facet_display_value, "' . $values . '")';
        }
    }
    return $orderby;
}, 10, 2 );
4 years ago
<?php

// Add to your (child) theme's functions.php

add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( 'pa_variety' == $facet['name'] ) {
        $orderby = 'f.facet_display_value ASC';
    }
    return $orderby;
}, 10, 2 );
4 years ago
<?php 
/** multiple facetwp_facet_orderby rules **/
add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( 'source' == $facet['name'] ) {
        $orderby = 'FIELD( f.facet_display_value, "Second Value in Dropdown", "First Value in Dropdown" ) DESC, f.facet_display_value ASC';
    }
    return $orderby;
}, 11, 2 );
5 years ago
<?php
/** use term order sort setting to sort by order of choices set in ACF field **/
add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( isset( $facet['source'] ) && 'acf/' == substr( $facet['source'], 0, 4 ) && 'term_order' == $facet['orderby'] ) {
        $source = str_replace( 'acf/', '', $facet['source'] );
        if ( isset( get_field_object( $source )['choices'] ) ) {
            $ordered_choices = implode( '", "', get_field_object( $source )['choices'] );
            $orderby = 'FIELD(f.facet_display_value, "' . $ordered_choices . '")';
        }
    }
    return $orderby;
}, 10, 2 );
5 years ago
<?php

// Add the following to your (child) theme's functions.php

add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( 'size_women' == $facet['name'] ) {
        $orderby = 'f.facet_display_value+0 ASC';
    }
    return $orderby;
}, 10, 2 );
5 years ago
<?php
/** order by facet value (value shown in url on selection) instead of display value (label) **/

add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( 'day_of_week' == $facet['name'] ) {
        $orderby = 'FIELD(f.facet_value, "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")';
    }
    return $orderby;
}, 10, 2 );
6 years ago
<?php

/* Remove "INCH" from the raw value */
add_filter( 'facetwp_index_row', function( $params, $class ) {
    if ( 'barrel_length' == $params['facet_name'] ) {
    
        // format the value
        $params['facet_value'] = preg_replace("/[^0-9.]/", '', $params['facet_value']);
    }
    return $params;
}, 10, 2 );


/* Sort numerically */
add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( 'barrel_length' == $facet['name'] ) {
        $orderby = 'f.facet_value+0 ASC';
    }
    return $orderby;
}, 10, 2 );
7 years ago
<?php

add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
    if ( 'my_facet' == $facet['name'] ) { // change 'my_facet' to name of your facet
		
		/** get you terms in the term_order and make a list of them in the form:
		 ** $ordered_terms = '"term_slug_1", "term_slug_2", "term_slug_3"';
		 ** note that the double quotes need to be part of the variable itself
		 ** so that that it will output a string as shown in
		 ** https://facetwp.com/documentation/facetwp_facet_orderby/ "Sort by arbitrary values" **/
        
        $orderby = 'FIELD(f.facet_value, $ordered_terms)';
    }
    return $orderby;
}, 10, 2 );
1 year ago
<?php
/**
 * custom sort order for a facet, this orders by facet_display_value but facet_value could also be used
 **/
add_filter( 'facetwp_facet_orderby', function( $orderby, $facet ) {
	if ( 'colors' == $facet['name'] ) { // change colors to the name of the facet
		$orderby = "FIELD(f.facet_display_value, 'Blue','Green','Red', 'Gray')";
	}
	return $orderby;
}, 10, 2 );