WP 4.0: РЕШЕНИЯ ПРОБЛЕМ С ПАРАМЕТРОМ ORDERBY В WP_QUERY
В WordPress 4.0 были исправлены проблемы, связанные с сортировкой результатов запроса с помощью класса WP_Query, особенно при сортировке по нескольким столбцам одновременно.
Сортировка результатов в WP_Query
Сортировка результатов в WP_Query определяется параметрами orderby и order, которые отвечают за часть ORDER BY в SQL-запросе.
По умолчанию:
orderby=post_dateorder=DESC
DESC (убывание) означает, что результаты сортируются по столбцу post_date в обратном порядке (самые свежие публикации первыми).
Указание столбца для сортировки
Параметр orderby принимает строковое значение — имя столбца, по которому будет проводиться сортировка:
$query = new WP_Query( [ 'orderby' => 'post_title' ] );
Либо вы можете использовать синоним для post_title, который звучит как title:
$query = new WP_Query( [ 'orderby' => 'title' ] );
В результате, SQL-запрос будет выглядеть следующим образом:
ORDER BY post_title DESC
Сортировка по нескольким столбцам
В параметре orderby вы также можете указать два столбца для сортировки, отделяя их пробелом. Тогда результат будет отсортирован по двум столбцам последовательно:
$query = new WP_Query( [ 'orderby' => 'title author' ] );
И SQL-запрос будет таким:
ORDER BY post_title, post_author DESC
Но стоит быть осторожными! В данном случае такой запрос может вернуть неожиданный результат. Это связано с тем, что порядок сортировки DESC применяется только к второму столбцу, а для первого используется порядок ASC. По умолчанию в MySQL столбцы сортируются по возрастанию — от меньшего к большему (ASC).
Исправления в WP 4.0
В WP 4.0 эта ошибка была исправлена. Теперь порядок сортировки устанавливается для всех указанных столбцов. То есть:
$query = new WP_Query( [ 'orderby' => 'title author' ] );
будет возвращать:
ORDER BY post_title DESC, post_author DESC
Кроме того, в WP 4.0 появилась возможность задавать порядок сортировки для каждого столбца отдельно. Для этого в параметре orderby нужно передать массив с необходимым синтаксисом:
$query = new WP_Query( [
'orderby' => [ 'title' => 'DESC', 'menu_order' => 'ASC' ]
] );
И SQL-запрос будет выглядеть так:
ORDER BY post_title DESC, menu_order ASC
Заключение
Использование параметров orderby и order позволяет вам гибко управлять со��тировкой постов в WordPress. Теперь, благодаря исправлениям в WordPress 4.0, вы можете с лёгкостью сортировать результаты по нескольким столбцам с настройками порядка.