Задать вопрос
Zheleznov
@Zheleznov
#/ Front / Back / DevOps /#

Как изменить GET запрос на фильтрах?

Добрый день
На сайте есть 2 вида фильтров

Первый по категориям, и добавляет параметр к URL
?filter_naznachenie=svet
(Например назначение: свет)

Второй фильтр по цене, добавляет к URL
?orderby=price

в коде:
<a 
href="?orderby=price" <?php if (isset($_GET['orderby']) && 'price' == $_GET['orderby']) : ?> 
class="active" <?php endif; ?>>
По цене
</a>


Если мы применим первый фильтр, а потом второй.
То как итог мы выйдем из фильтра по свету, и попадем на страницу
site.ru/shop/
и там отсортируем все товары по цене

Если для второго фильтра мы в ссылке пропишем &
&orderby=price
То 2 фильтра вместе работают норм
Но теперь на основной странице, без первого фильтра
site.ru/shop/
Второй фильтр не работает, потому что url вида
site.ru/shop/&orderby=price

Так вот, подскажите пожалуйста как сделать чтобы после применения первого фильтра
Второй фильтр работал через &
site.ru/shop/?filter_naznachenie=svet/&orderby=price

А без применения первого фильтра, чтобы второй фильтр работал через ?
site.ru/shop/?orderby=price

Надеюсь понятно объяснил)
  • Вопрос задан
  • 453 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
romandkoz
@romandkoz
Формируй фильтры в массиве, а в ссылку добавляй через http_build_query(), тогда не нужно думать о порядке & и ?
Ответ написан
Комментировать
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Давайте начнем с того, что у вас должны быть зарегистрированы переменные orderby и filter_naznachenie, это нужно, чтобы правильно получить их значения

add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $qvars ) {

	$qvars[] = 'filter_naznachenie';
	$qvars[] = 'orderby';

	return $qvars;
}


Строить ссылки нужно не через добавление символов & и ? руками, а с помощью add_query_arg()

$link = get_the_permalink()
$link = add_query_arg( [ 'orderby' => 'price', 'filter_naznachenie' => 'svet' ], $link );

echo '<a href="' . $link . '"></a>';
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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