Задать вопрос
@hypero

Форма подбора wordpress?

всем привет. Как можно сделать такую форму, выбираешь нужные опшины и тебе выдает результат.
6172d44f00a2a429059824.png
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
1. Регистрируете гет-переменные

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

	$qvars[] = 'brand';
	$qvars[] = 'model';
	$qvars[] = 'price';
	$qvars[] = 'location';

	return $qvars;
}


2. Собираете и выводите html-форму
<form method="get" class="block obj-filter">
	<div class="row d-flex align-items-center">
		<div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
			<select name="brand" id="brand" class="obj-select">
				<option value="audi">Audi</option>
				<option value="volkswagen">Volkswagen</option>
				<option value="mercedes">Mercedes</option>
				<option value="bmw">BMW</option>
			</select>
		</div>
		<div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
			<select name="price" id="price" class="obj-select">
				<option value="20">$20 000</option>
				<option value="50">$50 000</option>
				<option value="75">$75 000</option>
				<option value="100">$100 000</option>
			</select>
		</div>
		<div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
			<input type="text" name="location" id="location" class="obj-filter-input" value="">
		</div>
		<div class="col-12 col-md-6 col-lg-3 col-margin-bottom-small col-lg-margin-bottom-none">
			<input id="obj-filter-submit" type="submit" class="button" value="Фильтровать">
		</div>
	</div>
</form>


3. При нажатии кнопки Фильтровать страница перезагружается, вы получаете ссылку вида https://example.loc/?brand=audi&price=50. На хуке pre_get_postsможно поправить основной запрос вытянув данные из гет-параметров. Вам нужно установить новые tax_query или meta_query в зависимости от логики сайта

add_action( 'pre_get_posts', 'custom_pre_get_posts', 1 );
function custom_pre_get_posts( $query ) {
	// Выходим, если это админ-панель или не основной запрос
	if( is_admin() || ! $query->is_main_query() )
		return;

	// предположим, что это таксономия с машинами
	if ( $query->is_tax( 'cars' ) ) {
		
		$meta = array();
		$meta['meta_query']['relation'] = 'AND';

		// выбираем записи с GET запросами
		$query_vars = ['brand', 'model', 'price', 'location'];
		foreach ( $query_vars as $key => $query_var ) {
			if ( $var = get_query_var( $query_var, false ) ) {
				// тут пишем логику по которой собирается переменная meta_query и/или tax_query
			}
		}
		$query->set( 'meta_query', $meta );

	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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