WordPress 4.0 WP_Query 引入更强大的 Order By
WP_Query
的 orderby
参数用于告诉获取的 Posts 是基于哪列进行排序的,默认是 post_date
,并且 WP_Query
的默认排序顺序是降序,就是最新发布的日志排在前面。
WP_Query
的 orderby
基本用法
$q = new WP_Query( array( 'orderby' => 'post_title' ) );
或者:
$q = new WP_Query( array( 'orderby' => 'title' ) );
这两段代码都会生成如下的 SQL:
ORDER BY post_title DESC
WP_Query
的 orderby
高级用法
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_Query
的 orderby
参数:
$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()
方法。