Please help sorting out the sorting, I need to, under the condition $_SESSION['sort_opoz']=='rate' , after sorting by arbitrary field ratings_average , sorting by second arbitrary ratings_users , before sorting by date .

Here is the code:

 if (isset($_SESSION['sort_opoz'])){ if ($_SESSION['sort_opoz']=='date'){ $args['orderby'] = 'date'; $args['order'] = 'DESC'; } elseif ($_SESSION['sort_opoz']=='rate'){ $args['meta_key'] = 'ratings_average'; //ratings_users //$args['meta_query'] = array('ratings_users' => array('key' => 'ratings_users', 'type' => 'numeric', 'compare' => 'NOT EXISTS')); $args['orderby'] = array( 'meta_value_num' => 'DESC', 'date' => 'DESC' ); $args['order'] = ''; } } $args['meta_query'] = array(array('key' => 'mroom_detected', 'type' => 'numeric', 'compare' => 'NOT EXISTS')); if (isset($_SESSION['opoz'])){ if ($_SESSION['opoz']=='neopoz'){ $args['meta_query'] = array(array('key' => 'mroom_detected', 'type' => 'numeric', 'compare' => 'NOT EXISTS')); } elseif ($_SESSION['opoz']=='opozn'){ $args['meta_query'] = array(array('key' => 'mroom_detected', 'type' => 'numeric', 'compare' => 'EXISTS')); } } $posts = query_posts($args); 

    1 answer 1

    To sort by several arbitrary fields in the meta_query must be an associative array.

     $args['meta_query']['mroom_detected'] = array('key' => 'mroom_detected', 'type' => 'numeric', 'compare' => 'NOT EXISTS'); if (isset($_SESSION['sort_opoz'])){ if ($_SESSION['sort_opoz']=='date') { $args['orderby'] = 'date'; $args['order'] = 'DESC'; } elseif ($_SESSION['sort_opoz']=='rate') { $args['meta_query']['ratings_average'] = array('key' => 'ratings_average', 'compare' => 'EXISTS'); $args['meta_query']['ratings_users'] = array('key' => 'ratings_users', 'type' => 'numeric', 'compare' => 'EXISTS'); $args['orderby'] = array( 'ratings_average' => 'DESC', 'ratings_users' => 'DESC', 'date' => 'DESC' ); } } if (isset($_SESSION['opoz'])) { if ($_SESSION['opoz']=='opozn' ){ $args['meta_query']['mroom_detected'] = array('key' => 'mroom_detected', 'type' => 'numeric', 'compare' => 'EXISTS'); } } 

    Sorting by several meta-fields has been working in Wordpress since version 4.2.