按多个元值排序Wordpress帖子

Using get_posts(), I need to first retrieve posts that fall on a certain day (the day is set by a custom field - just the date, not time). I do this by using a meta key/value. Then, I need to order these posts based on the time of day (which is a separate custom field, just time, not date). So essentially I need to pull in all the events that fall on a given day, and order them according to the time.

First I grab the day, using a custom field:

if ( get_field('festival_day') ) {
  $day_stamp = get_field('festival_day');
}

Then I set my arguments for the query:

$args = array(
        'posts_per_page' => -1,
        'post_type' => 'event',
        'meta_key' => 'event_date',
        'meta_value' => $day_stamp
    );
    $events = get_posts( $args );

So.. the question is, how do I query the other custom field (which is the start time), and then sort by that time? The time field key is event_start_time.

Thanks!

You can user WP_Query to retrieve your events and you can query it something like below:

$args = array(
    'post_type' => 'event',
    'order' => 'DESC',
    'orderby' => 'meta_value',
    'meta_key' => 'event_start_time',
    'meta_query' => array(
        array(
            'key' => 'event_start_time',
            'value' => 'yourValue_here',
            'compare' => '>='
        ),
        array(
            'key' => 'event_date',
            'value' => $day_stamp,
            'compare' => '='
        )
    )
);
$query = new WP_Query( $args );

UNTESTED but it should work.

Check this code, it should work to sort your post according to time from resulting post of day.

$args = array(
'post_type'     => 'post',
'posts_per_page'    => -1,
'meta_key' => 'event_start_time',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query'=> array(
array(
'key' => 'event_date',
'value' => $day_stamp,
'compare' => 'IN'
)
)
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();     
echo '<li>'. get_the_title().'</li>';
}
echo '</ul>';
} else {
// no posts found
}