WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Не работает meta_query в WP_Query

На отдельной странице перестала работать правильно выборка. Может я чего не вижу? Помогите пожалуйста:

Есть две таблицы "Жилой комплекс" и "Квартира". Записи квартиры есть доп.поле, добавленное через ACF и содержащее ID жилого комплекса, которому принадлежит. Ну, в общем, обычная картинка.

Я фильтрую квартиры с помощью следующей конструкции:

    $zhk_ID = 1615;
	$args = array(
		'post_status'       => 'publish',
		'post_type'     => 'flat',
		'nopaging'      => 'true',
		'order'         => 'DESC',
'meta_query' => array(
			'key' => 'complex_id',
			'type'  => 'NUMERIC',
			'value' => $zhk_ID,
			'compare' => '='
		)
);

Конструкция работает на других страницах сайта в других шаблонах. Но перестала работать в новом шаблоне. Шаблон простенький - заполняет все мета-поля страницы квартиры (спасибо Кама за отличное решение). Так вот - с таким запросом выбор происходит всех квартир, а не отдельного ЖК. Не пойму, что я делаю не так. Тем более, что в других шаблонах этот код работает без проблем на том же сайте, с той же базой.
Пробовал по другому:

    $zhk_ID = 1615;
	$args = array(
		'post_status'       => 'publish',
		'post_type'     => 'flat',
		'nopaging'      => 'true',
		'order'         => 'DESC',  // DESC , ASC
		'meta_key'      => 'complex_id',
		'meta_value_num'    => $zhk_ID,
		'meta_compare_key'  => '=',
		'meta_compare'      => '='
);

Не помогло sad. Опять выбраны все квартиры всех ЖК. Просто мистика какая-то!

Заметки к вопросу:
Myakish 5 месяцев назад

Непонятку усугубляет то, что такая конструкция работает https://isk-vita.ru/katalog-kvartir/, например. Или здесь https://isk-vita.ru/zhk-ekspo4-podbor-kvartir/ - в этом случае прямо и жестко зашит выбор квартир только этого ЖК:

    $zhk_ID = 1621;
	$args = array(
		'post_status'       => 'publish',
		'post_type'     => 'flat',
		'nopaging'      => 'true',
		'order'         => 'DESC',  // DESC , ASC
		'meta_query' => array(
			'key' => 'complex_id',
			'type'  => 'NUMERIC',
			'value' => $zhk_ID,
			'compare' => '='
		)
	);

$query = new WP_Query( $args );

	while ( $query->have_posts() ) {
		$query->the_post();
...
}
Myakish 5 месяцев назад

Методом тыка нашел рабочий вариант. Но кто-бы объяснил почему так работает, а как выше нет?
Правильный вариант для meta_query такой:

        'meta_query' => array(
			'relation' => 'AND',
			array(
				'key'       => 'complex_id',
				'value'     => 1615,
				'type'      => 'NUMERIC',
				'compare'   => '='
			)

Я конечно понимаю, что OR в 'relation' может быть по умолчанию. Но если параметр в 'meta_query' 1, то с чем 'OR'?

0
Myakish
5 месяцев назад 6
  • 1
    stepan2058 www.weblancer.net/users/stepanko/?affili...

    Но кто-бы объяснил почему так работает, а как выше нет?

    meta_query - это массив масивов, а не просто один массив.
    Я раньше также на это попадался, когда только начинал работать с WP

    Myakish 5 месяцев назад

    Спасибо, буду помнить.

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