Из SELECT в COOKIES предыдущее значение?

Доброго времени суток. На сайте с помощью select и $_post сделал сортировку записей. Все работает кроме случая когда есть пагинация тогда при переходе на следующую страницу POST больше нет и WP выводит в обычном порядке. Решено было при выборе select записывать значение в cookie и сортировать по выбранному значению пока не будет выбрано что то другое и cookie не перезапишутся.

Есть select
<select id="sel_sort" class="sort_select" name="sort" onchange="this.form.submit()">
			<option value="default">Default sorting</option>
			<option value="newness">Sort by newness</option>
			<option value="popularity">Sort by popularity</option>
			<option value="average">Sort by average rating</option>
</select>


Есть js который ловит значение и записывает его в cookie
$.cookie('sort', $('#sel_sort').val());

проблема в том что выводится всегда предыдущий! выбор. То есть если нажать "Sort by newness" а потом "Sort by popularity" то в куках будет "newness" вместо "popularity" если теперь выбрать "Sort by average rating" то только теперь в куках будет "popularity". То есть всегда только предыдущее значение а хотелось бы текущее) подскажите может я что то не так делаю и в куки не то пишется
  • Вопрос задан
  • 523 просмотра
Пригласить эксперта
Ответы на вопрос 5
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
1. Никогда не используйте query_posts
2. Используйте хук pre_get_posts и ловите параметры из GET/POST в нем
3. Куки и js вам не понадобятся вообще.
Ответ написан
zloycoder
@zloycoder
Разработка веб-сайтов на заказ
а можно увидеть не одну строчку кода, чуть больше?
Ответ написан
archakov06
@archakov06
Frontend-разработчик (ReactJS)
Покажите больше кода. Тут не ясно через обработчик вы это делаете или через что? Расшарьте хотя-бы часть кода, где отлавливаются изменения, а лучше, если это не код ФСБ сайта, то всю логику данного функционала
Ответ написан
@ruzhevich Автор вопроса
по клику на selecte страница перезагружается идет проверка POST и в зависимости от этого идет запрос в БД и все выводится в разном порядке
if (isset( $_POST['sort'])) {
		
	if ($_POST['sort'] == "popularity") {
	
		 $categories = get_the_category();
    $cat = $categories[0]->term_id;
	
		$args = array(
		
             
            'meta_key'    => 'post_views_count',
            'orderby'     => 'meta_value_num',
            'order'       => 'DESC'
        );
		
		$args['cat'] = $cat;
		
		
		
        query_posts( $args );
		
	}
	
	elseif ($_POST['sort'] == "average") {

		global $query_string;
 query_posts( $query_string . '&orderby=rand' );
 }
elseif ($_POST['sort'] == "newness") {
		

		global $query_string;
 query_posts( $query_string . '&order=ASC' );
 
}	

}


дальше форма
<form method="post" action=""  id="id_town">

	<select id="sel_sort" class="sort_select" name="sort" onchange="this.form.submit()">
			<option value="default">Default sorting</option>
			<option <?php if ($_POST['sort'] == 'newness') {echo "selected='selected'";} ?> value="newness">Sort by newness</option>
			<option <?php if ($_POST['sort'] == 'popularity') {echo "selected='selected'";} ?> value="popularity">Sort by popularity</option>
			<option <?php if ($_POST['sort'] == 'average') {echo "selected='selected'";} ?> value="average">Sort by average rating</option>
			

	</select>

<script>$.cookie('sort', $('#sel_sort').val());</script>

<?php echo $_COOKIE["sort"]; ?>

</form>


ну в принципе и все, как и писал проблема с тем что куки не записываются как нужно а с запозданием, для наглядности вот страничка где все это происходит, она пока без js, пытаюсь локально все сделать а потом уже перенести готовое решение mytandoors.com/category/tandoors
Ответ написан
Комментировать
@tommy_13
предыдущее потому что ты выводишь через php (сервер), а пишешь через js (клиент).
Что мешает записывать cookie тоже через php?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы