WordPress: Сортировка записей
WordPress: Сортировка записей

WordPress: Сортировка записей

CMS 08.06.2020

В этой статье я покажу как в несколько шагов сделать сортировку на странице записей. Такая сортировка прекрасно подойдет для шаблонов Страницы каталогов (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 этапа Вы получаете удобную сортировку Ваших записей.

Поделиться

Отправить ответ

avatar
  Получать новые комментарии  
Уведомлять о новых комментариях