27.11.2018

Сортировка записей Wordpress по нескольким произвольным полям

Сортировка записей Wordpress по нескольким произвольным полям

В Wordpress есть полезная функция, которую можно использовать для получения списка постов — query_posts().

Используется самим WordPress при получении записей для текущей страницы (архив авторов, отдельная запись, рубрика, метка). Определяет какие посты будут показаны в базовом Цикле WordPress. Создает базовый Цикл WordPress. Возвращает список записей (постов).
WP-KAMA

Эта функция может принимать огромное количество аргументов, из которых в данной статье нам будут интересны order, orderby и meta_query.

Параметр meta_query используется для работы с произвольными полями записей Wordpress, например для фильтрации по произвольному полю, т.е. выбора записей по определенным значениям произвольных полей. В нашем случае мы будем использовать данный параметр для сортировки, а именно, обозначим имена наших произвольных полей.

Предположим, нам необходимо вывести товары интернет-магазина, отсортированные по наличию и по возрастанию цены. Для сортировки только по одному полю нам было бы достаточно такой записи:

$args = array(
	'meta_key' => 'price',
	'orderby'  => 'meta_value_num',
	'order'    => 'DESC'
);

В такой записи мы сортируем по произвольному полю meta_key => price, которое является числовым orderby => meta_value_num и по убыванию значения order => DESC. Однако, добавить второе поле сортировки в такой конструкции нельзя, как нельзя его добавить, используя множественный массив:

'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )

Но мы все же можем использовать множественный массив, но для этого нам необходимо с помощью параметра meta_query обозначить наши произвольные поля. Для этого мы добавляем через вложенные массивы эти поля с параметрами compare => EXISTS и type => NUMERIC для числовых значений:

$args = array(
	'meta_query' => array(
		'available' => array(
			'key' => 'available',
			'compare' => 'EXISTS'
		),
		'price' => array(
			'key' => 'price',
			'compare' => 'EXISTS',
			'type' => 'NUMERIC'
		)
	),
);

Таким образом мы определили имена произвольных полей в параметре meta_query и можем воспользоваться ими в множественном массиве orderby:

$args = array(
	'meta_query' => array(
		'available' => array(
			'key' => 'available',
			'compare' => 'EXISTS'
		),
		'price' => array(
			'key' => 'price',
			'compare' => 'EXISTS',
			'type' => 'NUMERIC'
		)
	),
	'orderby' => array(
		'available' => 'DESC',
		'price' => 'ASC'
	)
);

После этого уже можем воспользоваться функцией query_posts() для получения списка записей и дальнейшего вывода.

Нам будет приятно

Поделитесь

Комментарии

Загрузка комментариев...