Нашел вариант реализации кастомной сортировки постов (по дате, по заголовку, по дате изменений) в Wordpress, мой код:
<div class="toolbar-block">
<?php
if (isset($_GET['select']) && $_GET['select'] == 'newest') { $order = "&orderby=date&order=DESC"; $s1 = ' selected="selected"'; }
if (isset($_GET['select']) && $_GET['select'] == 'lastest') { $order = "&orderby=date&order=ASC"; $s2 = ' selected="selected"'; }
if (isset($_GET['select']) && $_GET['select'] == 'title') { $order = "&orderby=title&order=ASC"; $s3 = ' selected="selected"'; }
if (isset($_GET['select']) && $_GET['select'] == 'correct') { $order = "&orderby=modified"; $s4 = ' selected="selected"'; }
?>
<form method="get" id="order">
<select name="select" onchange='this.form.submit()' style="width:200px">
<option value="newest"<?php $s1?>>по дате (сначала новые)</option>
<option value="lastest"<?php $s2?>>по дате (сначала старые)</option>
<option value="title"<?php $s3?>>по заголовку</option>
<option value="correct"<?php $s4?>>по дате изменения</option>
</select>
</form>
<?php global $query_string; // параметры базового запроса
query_posts($query_string.'&'.$order); // базовый запрос + свои параметры
?>
</div>
<?php
if ( have_posts() ) : // если имеются записи в блоге.
//query_posts('cat=5'); // указываем ID рубрик, которые необходимо вывести.
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("category_name=news&paged=$page");
?>
<!-- post-navigation -->
<div class="toolbar clearfix">
<div class="toolbar-block">
<div class="toolbar-paginations">
<?php if( is_paged() ){ ?>
<p>Страница:</p>
<?php } ?>
<?php the_posts_pagination(array(
'show_all' => false, // показаны все страницы участвующие в пагинации
'prev_text' => '‹',
'next_text' => '›',
'type' => 'list',
'end_size' => 3, // количество страниц на концах
'mid_size' => 3, // количество страниц вокруг текущей
));
?>
</div>
</div>
</div> <!--/ toolbar -->
<?php
while (have_posts()) : the_post(); // запускаем цикл обхода материалов блога
?>
<div class="toolbar clearfix">
<div class="news-container clearfix">
<div class="news-container__thumb">
<a href="<?php the_permalink(); ?>">
<?php if(has_post_thumbnail()): ?>
<?php the_post_thumbnail(); ?>
<?php else: ?>
<img src="assets/img/news/attention.jpg" alt="">
<?php endif; ?>
</a>
</div><!-- /.news-container__thumb -->
<div class="news-container__text">
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
<span><?php the_time('j F Y'); ?></span>
<?php the_content();?>
</div><!-- /.news-container__text -->
</div><!-- /.news-container -->
</div> <!--/ toolbar -->
<?php endwhile; // завершаем цикл. ?>
<!-- post-navigation -->
<div class="toolbar clearfix">
<div class="toolbar-block">
<div class="toolbar-paginations">
<?php if( is_paged() ){ ?>
<p>Страница:</p>
<?php } ?>
<?php the_posts_pagination(array(
'show_all' => false, // показаны все страницы участвующие в пагинации
'prev_text' => '‹',
'next_text' => '›',
'type' => 'list',
'end_size' => 3, // количество страниц на концах
'mid_size' => 3, // количество страниц вокруг текущей
));
?>
</div>
</div>
</div> <!-- /toolbar -->
<?php else: ?>
<p>Новостей нет.</p>
<?php endif; ?>
<?php /* Сбрасываем настройки цикла. Если ниже по коду будет идти еще один цикл, чтобы не было сбоя. */ ?>
<?php wp_reset_query(); ?>
+ код скрипта:
jQuery(document).ready(function($){
var paramsString = location.search
var searchParams = new URLSearchParams(paramsString);
//Iterate the search parameters.
for (let p of searchParams) {
console.log(p);
}
//Сортировка select
$('#sort').change(function(){
var sortValues = $("#sort option:selected").val(); //получаем значение выбранного пункта select
if($("#sort").val()=="") {
searchParams.delete("select");
window.history.replaceState({}, '', location.pathname + '?' + searchParams);
location.reload(); //перезагрузить старницу (для ajax не нужно)
} else {
searchParams.set("select", sortValues);
window.history.replaceState({}, '', location.pathname + '?' + searchParams);
location.reload(); //перезагрузить страницу (для ajax не нужно)
}
});
});
Избавился от ошибок, но сортировка по прежнему не работает. Есть подозрения, что это связано с вызовом query_posts, которая нужна для отображения определенной категории (id=5) на отдельной странице page-news.php
В чем может быть ошибка и как ее исправить?