Не работает 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' => '=' );
Не помогло . Опять выбраны все квартиры всех ЖК. Просто мистика какая-то!
Непонятку усугубляет то, что такая конструкция работает 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(); ... }
Методом тыка нашел рабочий вариант. Но кто-бы объяснил почему так работает, а как выше нет?
Правильный вариант для meta_query такой:
'meta_query' => array( 'relation' => 'AND', array( 'key' => 'complex_id', 'value' => 1615, 'type' => 'NUMERIC', 'compare' => '=' )
Я конечно понимаю, что OR в 'relation' может быть по умолчанию. Но если параметр в 'meta_query' 1, то с чем 'OR'?
meta_query - это массив масивов, а не просто один массив.
Я раньше также на это попадался, когда только начинал работать с WP
Спасибо, буду помнить.