SearchWP – Change sort order

/**
 * Sort Search Query
 * @link https://www.billerickson.net/code/searchwp-change-sort-order/
 */
function ea_sort_search_query( $sql, $engine ) {

	global $wpdb;

	$options = array(
		'date' => "ORDER BY {$wpdb->prefix}posts.post_date DESC",
		'alpha' => "ORDER BY {$wpdb->prefix}posts.post_title ASC",
	);

	if( !empty( $_GET['search_sort'] ) && array_key_exists( $_GET['search_sort'], $options ) ) {
		$sql = $options[ $_GET['search_sort'] ];
	}

	return $sql;
}
add_filter( 'searchwp_query_orderby', 'ea_sort_search_query', 10, 2 );

/**
 * Search Filter
 * @link https://www.billerickson.net/code/searchwp-change-sort-order/
 */
function ea_search_filter() {
	if( ! have_posts() )
		return;
	$options = array(
		'relevance' => 'Relevance',
		'date'      => 'Date',
		'alpha'     => 'A-Z',
	);
	$current = !empty( $_GET['search_sort'] ) && array_key_exists( $_GET['search_sort'], $options ) ? $_GET['search_sort'] : 'relevance';
	echo '<div class="search-sort">';
	echo '<span class="label">Sorted by:</span>';

  echo '<ul>';
	foreach( $options as $key => $label ) {
		$icon = $key == $current ? ea_icon( 'check' ) : false;
		printf( '<li class="%s"><a href="%s">%s</a></li>',
			ea_class( 'option', 'current', $key == $current ),
			add_query_arg( array( 's' => get_search_query(), 'search_sort' => $key ), home_url() ),
			$label . $icon
		);
	}
	echo '</ul>';
	echo '</div>';
}

Bill Erickson

Bill Erickson is a freelance WordPress developer and a contributing developer to the Genesis framework. For the past 14 years he has worked with attorneys, publishers, corporations, and non-profits, building custom websites tailored to their needs and goals.

Ready to upgrade your website?

I build custom WordPress websites that look great and are easy to manage.

Let's Talk