Featured in: Sorting Query Results by Multiple Meta Keys
<?php | |
// Query Arguments | |
$args = array( | |
'post_type' => 'review', | |
'posts_per_page' => 10, | |
'paged' => get_query_var( 'paged', false ), | |
'meta_query' => array( | |
'relation' => 'AND', | |
'be_top_pick' => array( | |
'key' => 'be_top_pick', | |
'compare' => 'EXISTS', | |
), | |
'be_price' => array( | |
'key' => 'be_price', | |
'type' => 'NUMERIC', | |
'compare' => 'EXISTS', | |
), | |
'be_rating' => array( | |
'key' => 'be_rating', | |
'type' => 'NUMERIC', | |
'compare' => 'EXISTS', | |
), | |
) | |
); | |
// Sort Results | |
$current_sort = isset( $_GET['hosting-sort'] ) ? esc_attr( $_GET['hosting-sort'] ) : 'most-recent'; | |
switch( $current_sort ) { | |
case 'most-recent': | |
$args['orderby'] = array( | |
'be_top_pick' => 'DESC', | |
'post_date' => 'DESC', | |
); | |
break; | |
case 'price-high': | |
$args['orderby'] = array( | |
'be_top_pick' => 'DESC', | |
'be_price' => 'DESC', | |
); | |
break; | |
case 'price-low': | |
$args['orderby'] = array( | |
'be_top_pick' => 'DESC', | |
'be_price' => 'ASC', | |
); | |
break; | |
case 'rating-high': | |
$args['orderby'] = array( | |
'be_top_pick' => 'DESC', | |
'be_rating' => 'DESC', | |
); | |
break; | |
case 'rating-low': | |
$args['orderby'] = array( | |
'be_top_pick' => 'DESC', | |
'be_rating' => 'ASC', | |
); | |
break; | |
} | |
$loop = new WP_Query( $args ); |