В WordPress 4.2 (да, давно) появились некоторые дополнительные возможности при работе с параметром orderby
запросов WP_Query, get_posts() и т.д., особенно они хороши в комбинации с использованием параметра meta_query
.
Для тех, кто давно в теме WordPress, наверняка знаком с подобным типом записи:
$q1 = new WP_Query( array( 'meta_key' => 'city', 'orderby' => 'meta_value', // meta_value_num для числовых значений поля ) ); $q2 = new WP_Query( array( 'meta_key' => 'city', 'orderby' => 'city', // можно также указать название ключа ) );
Но дело в том, что подобная запись и параметры meta_key
, meta_value
появились ещё до существования meta_query
! А теперь, когда мы с вами используем их в запросе, то где-то в глубине они просто преобразуются в первый массив meta_query
(типа обратная совместимость).
C приходом WordPress 4.2 в 2015-м году у вас появилась возможность присваивать нечисловые индексы каждому из массивов (условий) meta_query
а потом что? А потом сортировать по этим индексам! 🚀
$q = new WP_Query( array( 'meta_query' => array( 'relation' => 'AND', 'state_clause' => array( 'key' => 'region', 'value' => 'Ленинградская область', ), 'city_clause' => array( 'key' => 'city', 'compare' => 'EXISTS', ), ), 'orderby' => 'city_clause', // результаты будут отсортированы по городам ) );
- На строках 4-7 мы задали условием для
meta_query
определённые регион - Условие на 8-12 строках означает, чтобы у постов существовала определённое или пустое мета поля с ключом
city
. - На 13-й строке мы сортируем по условию
city_clause
, то есть по мета-полюcity
.
А смотрите, что ещё можно сделать!
// ... 'orderby' => array( 'city_clause' => 'ASC', 'state_clause' => 'DESC', ), // ...
Изменения затронули не только класс WP_Query для вывода постов, но также и WP_Comment_Query
и WP_User_Query. Кайф.
Похожие посты
Источник: misha.blog