WordPress: Сортировка записей
В этой статье я покажу как в несколько шагов сделать сортировку на странице записей. Такая сортировка прекрасно подойдет для шаблонов Страницы каталогов (catalog.php), Страницы результатов поиска (search.php) и Страницы результатов поиска по тегам (tag.php).
1. Сначала нам нужно сделать верстку, например, select с опциями сортировки в Aside секции. Так как по дефолту записи выводятся в сортировке «сначала новые» — я отметила этот вид сортировки как выбранный:
<form method="get" id="order">
<div class="input-field select-custom select-custom-v1">
<select name="order" onchange='this.form.submit()'>
<option value="" selected>По дате - сначала новые</option>
<option value="latest"<?=$s1?>>По дате - сначала старые</option>
<option value="count"<?=$s2?>>По популярности</option>
<option value="title"<?=$s3?>>По названию</option>
<option value="correct"<?=$s4?>>По дате изменения</option>
</select>
<label class="label-select">Сортировать</label>
</div>
</form>
Если в Вашем случае нужно будет явно задать значение «Сначала новые» — просто добавьте эту опцию в список:
<option value="newest"<?=$s5?>>По дате - сначала новые</option>
Обратите внимание на value
и $s1-$s5
, которые мы используем в следующем шаге.
После выбора нового значения форма будет автоматически отправляться и, в результате редиректа страницы, будут показываться данные согласно выбранной сортировке.
Здесь Вы сможете стилизировать select по вашему желанию, задав ему нужные классы и стили.
2. Теперь нам нужно написать обработчик, который бы выводил значения в правильной сортировке. Наш обработчик будет выглядеть так:
if ($_GET['order'] == 'latest') { $order = "&orderby=date&order=ASC"; $s1 = ' selected="selected"'; }
if ($_GET['order'] == 'count') { $order = "order=DESC&orderby=post_views"; $s2 = ' selected="selected"'; }
if ($_GET['order'] == 'title') { $order = "&orderby=title&order=ASC"; $s3 = ' selected="selected"'; }
if ($_GET['order'] == 'correct') { $order = "&orderby=modified"; $s4 = ' selected="selected"'; }
// if ($_GET['order'] == 'newest') { $order = "&orderby=date&order=DESC"; $s5 = ' selected="selected"'; }
// - нужно в случае если вы используете опцию "По дате - сначала новые"
global $query_string; // параметры базового запроса
query_posts($query_string.'&'.$order); // базовый запрос + свои параметры
Этот код нужно будет поместить перед циклом получения записей
if (have_posts()) :
while (have_posts()) : the_post();
Мы написали обработчик для каждого значения value
в select options: latest, count, title & correct. В случае отправки формы выбранное значение будет попадать в GET параметр url с ключем order
. Согласно выбранного типа сортировки, мы задаем дополнительные опции к запросу на получение записей: orderby, order и т.д., а по $s1-$s5
— устанавливаем значение выбранной опции в select на загрузку страницы.
В коде, приведенном выше, для получения Популярных записей используется запрос "order=DESC&orderby=post_views"
, здесь post_views
— название переменной для подсчета количества просмотров в моем случае, где я использую плагин. В Вашем случае переменная может отличаться.
Таким образом, всего в 2 этапа Вы получаете удобную сортировку Ваших записей.