我有一个名为" "的自定义帖子类型。电影",中继器字段名为"展示",其中有一个字段"start_datetime类型为DateTime的"...
我想执行一个查询来获取所有在未来7天内有放映的电影,并且我想按照放映的开始时间来排序。
我有这个查询。
$query = new \WP_Query( array(
'numberposts' => -1,
'post_type' => 'film',
'meta_key' => 'showings_%_start_datetime',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'showings_%_start_datetime',
'value' => array( time(), strtotime( '+7 days' ) ),
'type' => 'NUMERIC',
'compare' => 'BETWEEN'
)
)
));
这将正确地抓取所有在未来7天内有放映的影片 但它将按照开始时间的开始时间来排列影片。第一 显示,而我需要它按照 第一届未来 显示... 有什么帮助吗?
例子 电影A今天有一场放映 电影B明天上映,1年前又上映。
我的结果将被排序。电影B,然后是电影A(因为实际上电影B是一个放映开始较早的)。但我需要它的顺序是相反的,因为电影A是电影与第一个未来的放映......
我发现了这个问题,我检查了通过以下方式创建的实际SQL。WP_Query
. 我意识到,生成的SQL查询有2个INNER JOINs,其中一个为 meta_key
另一个是实际的 meta_query
.
基本上,一方面是过滤那些具有以下特点的电影 showings_%_start_datetime
在接下来的七天里,另一方面(独立),它正在按照电影的内容进行排序。showings_%_start_datetime
值。
只是移动 meta_query
的参数。基础查询 运作良好。
query = new \WP_Query( array(
'numberposts' => -1,
'post_type' => 'film',
'meta_key' => 'showings_%_start_datetime',
'meta_value' => array( time(), strtotime( '+7 days' ) ),
'meta_type' => 'NUMERIC',
'meta_compare' => 'BETWEEN',
'orderby' => 'meta_value_num',
'order' => 'ASC',
));