WordPress 4.0 WP_Query 引入更强大的 Order By

WP_Queryorderby 参数用于告诉获取的 Posts 是基于哪列进行排序的,默认是 post_date,并且 WP_Query 的默认排序顺序是降序,就是最新发布的日志排在前面。

WP_Queryorderby 基本用法


$q = new WP_Query( array( 'orderby' => 'post_title' ) );

或者:


$q = new WP_Query( array( 'orderby' => 'title' ) );

这两段代码都会生成如下的 SQL:


ORDER BY post_title DESC

WP_Queryorderby 高级用法

orderby 还可以接受有空格分开的多列:


$q = new WP_Query( array( 'orderby' => 'title author' ) );

在 4.0 之前,上面的代码会有问题,order 的值只会就加到 orederby 语句的最后,所以生成的 SQL 会这样子:


ORDER BY post_title, post_author DESC

因为 MySQL 默认的排序顺序是 ASC(升序),所以上面语句的结果就会和我们预期的不同,我们希望是按照标题降序,然后按照作者降序,而实际是按照标题升序,然后按照作者降序。

所以到 4.0,WordPress 修正了这个问题,如果你输入用空格分开的多列,每个列后面都会加入排序顺序,并且 4.0 还可以让你控制每列的排序顺序,我们可以通过传递一个数组给 WP_Queryorderby 参数:


$q = new WP_Query( array( 'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' ) ) );

生成的 SQL:


ORDER BY post_title DESC, menu_order ASC

更详细用法可以参考:WP_Query 累的 parse_order() 方法。

标签:

热门文章