我试图通过两个元字段(第一个日期,然后是时间)对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来查询数据库和输出内容。
提前谢谢。
正如我所看到的,你试图按元键排序——在这种情况下,你必须根据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