提问者:小点点

WP_Queryorderby多个参数不工作


我试图通过两个元字段(第一个日期,然后是时间)对WP_查询结果进行排序。如此有效

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个答案

匿名用户

正如我所看到的,你试图按元键排序——在这种情况下,你必须根据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和meta_value_num