WordPress的meta_query和排序依据的自定义字段
问题描述:
我有一个自定义文章类型称为“电影”,具有中继场名为“下片”,其中有一个字段“start_datetime” DateTime类型...WordPress的meta_query和排序依据的自定义字段
我想在未来7天内执行查询以获取所有具有显示的电影,并且我想通过显示的start_datetime对它们进行排序。
我有这个疑问:
$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天内正确有一个表现的所有影片,但随后下令由FIRST显示的start_datetime的电影,我需要它通过的第一个未来的start_datetime来订购它们......请帮忙吗?
实施例:
膜A今天的展示。
电影B有一个明天和另一个显示1年前。
我的结果将被命令:电影B,然后电影A(因为实际上电影B是一个显示开始eralier)。但我需要以相反的顺序排列,因为电影A是第一部未来电影...
答
我通过检查由WP_Query
创建的实际SQL发现了这个问题。我意识到生成的SQL查询有2个INNER JOIN,一个用于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',
));