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 ); |