Улучшенные возможности сортировки при помощи orderby и meta_query

В 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

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: