WordPress как на ладони

Сложная выборка на WP_Query

Нужно сделать сложную выборку недвижимости на wp.

$flat = $_POST['s'];
$district = $_POST['e'];

// args
$args = array(
	'numberposts'   => -1,
	'post_type'     => 'apartment',
	'meta_query' => [
		'relation' => 'OR',
		[
			'relation' => 'AND',
			['key'      => 'apartment-form-type',
			'value'     => $flat,
			'compare'   => '='
			],
		],
		[
			'relation' => 'AND',
			['key'      => 'apartment-form-district',
			'value'     => $district,
			'compare'   => '='
			]
		]
	]
);
<form action='search.php' method='post'>

	<div class="select-flat"><select class="selector-big-field" name='s'>
			<option value="Квартира">Квартира</option>
			<option value="Дом">Дом</option>
			<option value="Участок">Участок</option>
			<option value="Коммерческая недвижимость">Коммерческая недвижимость</option>
		</select></div>

	<div class="select-district">
	<select class="selector-big-field" name='e'>
	<option selected disabled>Район</option>
			<option value="Приморский">Приморский</option>
			<option value="Малиновский">Малиновский</option>
			<option value="Суворовский">Суворовский</option>
			<option value="Киевский">Киевский</option>
		</select></div>

	<input class="select-search-btn" type='submit' name='send' value='Поиск' />
</form>

Выборка происходит, но в нее попадают лишние посты. Например при выборе Дом + Приморский в результат попадают посты, которые относятся к Приморскому району, но имеют другой тип недвижимости (не Дом). Подскажите как исключить лишнее.

0
arkanzas
3.4 года назад
  • 1
    stepan2278 www.weblancer.net/users/stepanko/?affili...
    'relation' => 'OR',

    нужно заменить на

    'relation' => 'AND',

    Поиск будет так происходить, чтоб посты имели ВСЕ перечисленные метаполя с вашего условия meta_query

    $args = array(
    	'numberposts'   => -1,
    	'post_type'     => 'apartment',
    	'meta_query' => [
    		'relation' => 'AND',
    		[
    			'key'      => 'apartment-form-type',
    			'value'     => $flat,
    			'compare'   => '='
    		],
    		[
    			'key'      => 'apartment-form-district',
    			'value'     => $district,
    			'compare'   => '='
    		]
    	]
    );
    Комментировать
  • 0
    stepan2278 www.weblancer.net/users/stepanko/?affili...

    relation(строка)
    Этот параметр указывается как строка в главном массиве meta_query и указывает как сравнивать между собой несколько массивов с параметрами запроса, указанных в этом главном массиве.
    Параметр может принимать два значение:
    OR - выбрать мета-поля подходящие хоты бы под один массив с параметрами запроса;
    AND (по умолчанию) - выбрать мета поля подходящие для всех массивов с параметрами запроса.

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