多个参数的WP_Query顺序无效

时间:2016-08-10 09:29:51

标签: wordpress

我试图按两个元字段排序我的WP_Query结果,第一个日期然后是时间。如此有效

Date A 17:00
Date B 18:00
Date C 07:00
Date B 10:00 
Date A 9:00

会来

Date A 9:00
Date A 17:00
Date B 10:00 
Date B 18:00
Date C 07:00

这是我目前的代码:

"post_type" => "event",
"post_status" => "publish",
"posts_per_page" => 25,
"ignore_sticky_posts" => 0,
"show_sticky" => true,
"meta_query" => array(
    array(
    "key" => "_meta_event_start_date",
    "compare" => ">=",
    "value" => 0
    ),
    array(
    "key" => "_meta_event_start_time",
    "compare" => ">=",
    "value" => 0
    ),
),
"order" => "ASC",
"orderby" => "_meta_event_start_date _meta_event_start_time"

目前正在按日期排序我的结果,但不是时间(时间格式存储hh:mm(24小时))。我如何修改查询以使其工作?

我已经看到其他响应建议使用foreach循环,sql查询甚至过滤器。我不能使用这些,因为我正在使用的网站使用搜索插件Facet WP,并且搜索需要WP_Query来查询数据库和输出内容。

提前致谢。

1 个答案:

答案 0 :(得分:1)

正如我所看到你试图按元键排序 - 根据WordPress 4.2的变化,你必须在这种情况下使用更复杂的语法 - 如下所示:

"post_type" => "event",
"post_status" => "publish",
"posts_per_page" => 25,
"ignore_sticky_posts" => 0,
"show_sticky" => true,
"meta_query" => array(
    "event_start_date" => array(
        "key" => "_meta_event_start_date",
        "compare" => ">=",
        "value" => 0
    ),
    "event_start_time" => array(
        "key" => "_meta_event_start_time",
        "compare" => ">=",
        "value" => 0
    )
),
"orderby" => array(
    "event_start_date" => "ASC",
    "event_start_time" => "ASC"
)

此外 - 对于单个meta_key排序,值得记住,您必须使用 orderby 子句值meta_value and meta_value_num