27.11.2018
Сортировка записей Wordpress по нескольким произвольным полям
В Wordpress есть полезная функция, которую можно использовать для получения списка постов — query_posts().
Используется самим WordPress при получении записей для текущей страницы (архив авторов, отдельная запись, рубрика, метка). Определяет какие посты будут показаны в базовом Цикле WordPress. Создает базовый Цикл WordPress. Возвращает список записей (постов).
Эта функция может принимать огромное количество аргументов, из которых в данной статье нам будут интересны 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() для получения списка записей и дальнейшего вывода.
Нам будет приятно
Поделитесь
Комментарии