У WordPress 4.0 виправлені недоліки пов’язані з сортуванням результатів запиту WP_Query, коли сортування йде по декількох колонкам одночасно.

Сортування при отриманні результатів в WP_Query задається параметром orderby і order які відповідають за умову ‘ORDER BY’ SQL запиту. За замовчуванням orderby = post_date і order = DESC. DESC (descending — спаданням) означає, що результати упорядковано колонці post_date в зворотному порядку (останні пости на початку).

В параметр orderby вказується рядок — назва колонки по якій сортувати:

$ Query = new WP_Query (array (‘orderby’ => ‘post_title’));

// Або можна так, title = post_title — це алиас (синонім):
$ Query = new WP_Query (array (‘orderby’ => ‘title’));

В результаті такого запиту, умова SQL, що відповідає за сортування буде виглядати так:

ORDER BY post_title DESC

Також в orderby можна вказати дві колонки для сортування, через пробіл. Тоді результат буде впорядкований по двом колонками по черзі:

$ Query = new WP_Query (array (‘orderby’ => ‘title author’));

SQL вийде такий:

ORDER BY post_title, post_author DESC

Такий запит поверне несподіваний результат. Так як в цьому запиті порядок сортування DESC вказаний тільки для другої колонки, а у першій колонки він ASC. Тому що в MySQL за замовчуванням колонки сортуються за зростанням — від меншого до більшого — ASC (ascending — по зростанню).

У WP 4.0 помилка виправлена ​​і порядок сортування ставиться для всіх зазначених колонок, тобто .:

$ Query = new WP_Query (array (‘orderby’ => ‘title author’));

поверне:

ORDER BY post_title DESC, post_author DESC

Також в WP 4.0 стало можливим вказати порядок сортування для кожної колонки окремо, для цього в параметр orderby потрібно передати масив з таким синтаксисом:

$ Query = new WP_Query (array (‘orderby’ => array (‘title’ => ‘DESC’, ‘menu_order’ => ‘ASC’)));

В результаті SQL буде таким:

ORDER BY post_title DESC, menu_order ASC

Докладніше про те, як будується ORDER BY запит, дивіться в методах WP_Query: parse_order () і parse_orderby ().