Skip to content

Instantly share code, notes, and snippets.

@jchristopher
Created September 23, 2019 18:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jchristopher/846078bd709966d944c8edb195736778 to your computer and use it in GitHub Desktop.
Save jchristopher/846078bd709966d944c8edb195736778 to your computer and use it in GitHub Desktop.
Sort SearchWP results by multiple (3) numeric Custom Field post meta values
<?php
add_filter( 'searchwp_query_main_join', function( $sql, $engine ) {
global $wpdb;
$priority_1_meta_key = 'featured_meta_key';
$priority_2_meta_key = 'secondary_meta_key';
$priority_3_meta_key = 'tertiary_meta_key';
$sql = $sql . " LEFT JOIN {$wpdb->postmeta} swpprimary ON {$wpdb->posts}.ID = swpprimary.post_id AND swpprimary.meta_key = '{$priority_1_meta_key}'";
$sql = $sql . " LEFT JOIN {$wpdb->postmeta} swpsecondary ON {$wpdb->posts}.ID = swpsecondary.post_id AND swpsecondary.meta_key = '{$priority_2_meta_key}'";
$sql = $sql . " LEFT JOIN {$wpdb->postmeta} swptertiary ON {$wpdb->posts}.ID = swptertiary.post_id AND swptertiary.meta_key = '{$priority_3_meta_key}'";
return $sql;
}, 10, 2 );
add_filter( 'searchwp_query_orderby', function( $orderby, $engine ) {
$my_order = 'DESC'; // use 'DESC' or 'ASC'
$original_orderby = str_replace( 'ORDER BY', '', $orderby );
if ( 'DESC' === $my_order ) {
// Sort in descending order
$new_orderby = "ORDER BY swpprimary.meta_value+0 DESC, swpsecondary.meta_value+0 DESC, swptertiary.meta_value+0 DESC, " . $original_orderby;
} else {
// Sort in ascending order; place empties last
// @link http://stackoverflow.com/questions/2051602/mysql-orderby-a-number-nulls-last#8174026
$new_orderby = "ORDER BY -swpprimary.meta_value+0 DESC, -swpsecondary.meta_value+0 DESC, -swptertiary.meta_value+0 DESC, " . $original_orderby;
}
return $new_orderby;
}, 30, 2 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment