Use multiple meta keys for sorting query

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

Bill Erickson

Bill Erickson is the co-founder and lead developer at CultivateWP, a WordPress agency focusing on high performance sites for web publishers.

About Me
Ready to upgrade your website?

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

Let's Talk