Улучшенные возможности сортировки при помощи 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. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, в случае несоблюдения этого условия в 99% случаях ваш коммент будет удалён, а автор заблокирован. Печалька.