How to order by multiple meta keys? How to order by multiple meta keys? wordpress wordpress

How to order by multiple meta keys?


This is something that WordPress added support for in 4.2: https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

In your case you'll probably want to do something like this:

$args = array(    'post_type'  => 'event',    'meta_query' => array(        'relation' => 'AND',        'event_start_date_clause' => array(            'key'     => '_event_start_date',            'compare' => 'EXISTS',        ),        'event_start_time_clause' => array(            'key'     => '_event_start_time',            'compare' => 'EXISTS',        ),     ),    'orderby' => array(        'event_start_date_clause' => 'ASC',        'event_start_time_clause' => 'ASC',    ),);$loop = new WP_Query( $args );


You have to use meta_query at add your meta keys as everyone said, but also you have to customize order by function.

$args = array(    'post_type' => 'event',    'meta_key' => '_event_start_date',    'meta_query' => array(        array('key' => '_event_start_date'),        array('key' => '_event_start_time')    ),);add_filter('posts_orderby','customorderby');$loop = new WP_Query( $args );remove_filter('posts_orderby','customorderby');

And put this on your functions.php

function customorderby($orderby) {    return 'mt1.meta_value ASC, mt2.meta_value ASC';}

You can read more at http://dotnordic.se/sorting-wordpress-posts-by-several-numeric-custom-fields/


From WP_Query documentation, use meta_query and fill up with an array of meta key/values:

$args = array(    'post_type' => 'product',    'meta_query' => array(        array(            'key' => 'color',            'value' => 'blue',            'compare' => 'NOT LIKE'        ),        array(            'key' => 'price',            'value' => array( 20, 100 ),            'type' => 'numeric',            'compare' => 'BETWEEN'        )    ));$query = new WP_Query( $args );