WordPress meta_query和orderby自定义字段。

问题描述 投票:1回答:1

我有一个名为" "的自定义帖子类型。电影",中继器字段名为"展示",其中有一个字段"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是电影与第一个未来的放映......

php wordpress advanced-custom-fields
1个回答
2
投票

我发现了这个问题,我检查了通过以下方式创建的实际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',
));
© www.soinside.com 2019 - 2024. All rights reserved.