我认为它应该能够钩住posts_clauses filter 向sql查询中添加字段。
add_filter( \'posts_clauses\', \'intercept_query_clauses\', 20, 1 );
function intercept_query_clauses( $pieces ){
global $wpdb;
$pieces[\'fields\'].=\', (IF(UNIX_TIMESTAMP()>=\'.$wpdb->postmeta.\'.meta_value,\'.$wpdb->postmeta.\'.meta_value,(UNIX-TIMESTAMP() - \'.$wpdb->postmeta.\'.meta_value)+UNIX_TIMESTAMP(\'2099-01-01\'))) as timestamp_direction\';
$pieces[\'orderby\']=\'timestamp_direction ASC\';
return $pieces;
}
逻辑如下:
假设在元字段中有一些时间戳
事件1(过去):9999
事件2(过去):10000
现在的时间戳:11111
事件3(未来):12222
事件4(未来):13333
2099-01-01的时间戳:100000
我们在查询中构建一个临时字段,如果该字段的时间戳高于当前时间戳,则该字段具有元字段的时间戳。如果元字段低于元字段,则首先从当前时间戳中减去它,然后从未来的日期时间戳中减去它。之后,我们有以下值:
事件1:101112
事件2:101111
事件3:12222
事件4:13333
现在,按timestamp\\u方向对其进行排序为我们提供了所需的顺序:首先是未来事件的排序ASC,然后是过去事件的排序DESC:
事件3:12222
事件4:13333
事件2:101111
事件1:101112