WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Купить персональные IPV4 и IPV6 прокси

Проблема с фильтром по произвольным полям (чекбоксам)!

У меня сайт на ВП.
Создал постайп apartments в нем добавляю квартиры. Задача: сделать фильтр поиска по цене (от, до), по типу квартиры (радионкнопки) и самое главное - удобства (чекбоксы).
Сделал произвольное поле через админку, дал название полю comfort и перечислил необходимые значения.

Вот код формы в шаблоне:

<form class="filter" action="/search" method="GET" role="form"><!-- action пустой, чтобы ссылалось на текущую страницу -->
		  <label>Цена от:
			<input type="number" name="min-price">
		  </label>
		  <label>до:
			<input type="number" name="max-price">
		  </label>
		  <label>
			<input type="checkbox" name="type[]" value="Студио">
			<span>Студио</span>
		  </label>
		  <label>
			<input type="checkbox" name="type[]" value="Одна спальня">
			<span>Одна спальня</span>
		  </label>
		  <label>
			<input type="checkbox" name="type[]" value="Две спальни">
			<span>Две спальни</span>
		  </label>
		  <label>
			<input type="checkbox" name="type[]" value="Три спальни">
			<span>Три спальни</span>
		  </label>
		  <?php
		  $args = array(
			'post_type' => 'apartments'
		  );
		  $query = new WP_Query( $args );
		  if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
			$arr_comfort = get_post_meta( $post->ID, 'comfort');?>
			<?php foreach ($arr_comfort as $comfort) {
			  foreach ($comfort as $comfort_k => $comfort_v) {; ?>
				<label>
				  <input type="checkbox" name="comfort[]" value="<?php echo $comfort_v; ?>">
				  <span><?php echo $comfort_v; ?></span>
				</label>
			<?php }
			  }
			endwhile;
			else :
		  wp_reset_postdata();
			endif;?>
<!--          <label>-->
<!--            <input type="text" name="person">-->
<!--            Person-->
<!--          </label>-->
		  <a href="#" target="_blank"><button type="submit">Отфильтровать</button></a>
		</form>

Вот скрипт обработки:

$args = array(
  'post_type' => 'apartments',
//  'paged' => get_query_var('paged'),
);

$args['meta_query'] = array(
  'relation'=>'AND'
);

if (isset($_GET['min-price']) || isset($_GET['max-price'])) {

  if ($_GET['min-price'] == '') $_GET['min-price'] = 0;
  if ($_GET['max-price'] == '') $_GET['max-price'] = 9999999;

  $args['meta_query'][] = array(
	'key' => 'sale_price',
	'value' => array($_GET['min-price'], $_GET['max-price']),
	'type' => 'numeric',
	'compare' => 'BETWEEN'
  );
}

if (!empty($_GET['type'])) {
  $args['meta_query'][] = array(
	'key' => 'type',
	'value' => $_GET['type'],
	'compare' => 'IN'
  );
}

if (!empty($_GET['comfort'])) {
  $args['meta_query'][] = array(
	'key' => 'comfort',
	'value' => $_GET['comfort'],
	'compare' => 'IN'
  );
}

$query = new WP_Query( $args );

Все работает, кроме чекбоксов, уже все голову себе сломал. На странице поиска, после отправки запроса в мета полях находятся все отмеченные чекбоксы, но фильтрация не происходит, показывает пустую страницу... Буду рад помощи.

0
Артем
5 месяцев назад

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация