no1s1a
@no1s1a
Самый темный час - перед рассветом!

Как сделать на wordpress'е сортировку по цене?

Задача стоит такая:
Сделать сортировку по цене.
Цена в запись выводится из плагина "произвольные поля (ACF)". Мне нужно что бы сортировка записей была от меньшего к большему и на оборот. Может кто то сталкивался с подобным, подскажите пожалуйста, что делать?
  • Вопрос задан
  • 3174 просмотра
Решения вопроса 1
@dw0rd3n
Я так понимаю что надо сделать так чтоб посетитель сам мог выбирать сортировку. Этот вид сортировки работает с плагином wp-pagenav

В functions.php

function wp_sort() {
  if ($_GET["sort"] != NULL) { 
    $sort = $_GET["sort"];
    setcookie("sorting", $sort);  
  } 
}


В category.php
<?php wp_sort(); ?>

<?php $pageNum=(get_query_var('paged')) ? get_query_var('paged') : 1; ?>
<form action="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>" method="GET" >
	<span>Сортировать по цене: </span>
	<input type="hidden" name="cat" value="<?php the_category_ID(); ?>">
	<input type="hidden" name="paged" value="<?php echo $pageNum; ?>">
	<input type="radio" id="sort_asc" name="sort" value="asc" onchange="this.form.submit()"><label for="sort_asc">По возрастанию</label>
	<input type="radio" id="sort_desc" name="sort" value="desc" onchange="this.form.submit()"><label for="sort_desc">По убыванию</label>
	<input type="radio" id="sort_none" name="sort" value="none" onchange="this.form.submit()"><label for="sort_none">Сбросить фильтр</label>
</form>

<?php 
	if($_GET["sort"] == NULL) {
		$args['order'] = $_COOKIE["sorting"];
	} else {
		$args['order'] = $_GET["sort"];
	}		
		$args['cat'] = the_category_ID();	
		$args['orderby'] = 'meta_value_num';
		$args['meta_key'] = 'price';
		$args['paged'] = get_query_var('paged');
		$the_query = new WP_Query( $args);
	?>
<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

 <!-- Тут твой шаблон записи -->

<?php endwhile;
	else:
		echo 'страница не найдена';
	endif;
?>


Это мой вариант пользовательской сортировки
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Punkie
@Punkie
Документацию не читай, вопросы задавай :)

https://www.advancedcustomfields.com/resources/ord...
Ответ написан
Комментировать
trampick
@trampick
Веб-разработчик
acf работает на основе post_meta. Допустим если у тебя поле имеет имя _price, то в массив аргументов для wp_query тебе надо добавить:
$args['orderby'] = 'meta_value_num';
$args['meta_key'] = '_price';
$args['order'] = 'asc'; //Выводить по возрастанию. Можно использовать desc вместо asc что бы выводить в обратном порядке.

Если же у вас нет явного формирования wp_query, то вам нужно получить глобальный wp_query
global $wp_query;
Затем сформировать массив параметров
$args['orderby'] = 'meta_value_num';
$args['meta_key'] = '_price';
$args['order'] = 'asc'; //Выводить по возрастанию. Можно использовать desc вместо asc что бы выводить в обратном порядке.

И объединить с текущим запросом
query_posts(array_merge($args, $wp_query->query));
Ответ написан
Комментировать
no1s1a
@no1s1a Автор вопроса
Самый темный час - перед рассветом!
Это прекрасно, но есть одно но, это должно по факту должно выглядеть так, так как переменная должна передаваться на другие страницы:
$args['orderby'] = 'meta_value_num';
$args['meta_key'] = '_price';
$args['order'] = $sort;

function wp_sort() {
ini_set('display_errors', 1);
error_reporting(E_ALL);
          if ($_GET["sort"] != NULL) {
            $sort = $_GET["sort"];
            $cookie_domain = ".".$_SERVER['HTTP_HOST'];
            setcookie("sort", $sort,time() + (86400),"/", $cookie_domain);
            if ($_COOKIE["sort"])
{
echo "very good";
} else
{
echo "This is bad";
}
            echo $_COOKIE["sort"];
            echo "Куки - ".$_COOKIE["sort"];
            echo "Вар - ".$sort;
          } else {
            echo "Куки - ".$_COOKIE["sort"];
            echo "Вар - ".$sort;
          }
}
?>


Почему то не хочет кушать сессию
Ответ написан
Комментировать
VasyaPertrov
@VasyaPertrov
Изготовление и безопастность сайтов. WP и др.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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