В итоге решил сделать вывод один циклом с модификацией запроса через add_filter
$args = array(
'post_type' => 'chronicles',
'posts_per_page' => 13,
'order' => 'ASC',
'orderby' => 'meta_value',
'meta_key' => 'chronicles_event_date'
);
$args['paged'] = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$args['meta_query'] = array(
'relation' => 'OR',
array(
array(
'key' => 'chronicles_month',
),
array(
'key' => 'chronicles_day',
)
),
);
add_filter( 'posts_orderby', $func = function ( $orderby, $loop ) {
$start_m = date('m');
$start_d = date('d');
global $wpdb;
$orderby = $wpdb->prepare(
"
CASE WHEN (mt1.meta_value >= %s AND mt2.meta_value >= %s) THEN mt1.meta_value ELSE (12+mt1.meta_value) END ASC, mt2.meta_value ASC
"
, $start_m, $start_d
);
return $orderby;
}, 10, 2 );
$loop = new WP_Query( $args );
remove_filter( 'posts_orderby', $func, 10, 2 );