Intereting Posts
WooCommerce печатать подкатегорию продукта Получение значений выпадающего списка таксономии Исключить пользовательский post_type в создании Sitemap? Передайте идентификатор комментария через URL-адрес и добавьте пул комментариев в URL-адрес Как создавать собственные записи типа сообщения по автору? Как разрешить мою неспособность войти в панель инструментов WordPress? WP Rewrite Rules – Пользовательский тип сообщения и таксономия Как установить статус сообщения в черновик, если он старше, чем сегодня Во всяком случае, чтобы карты Google отображали несколько уникальных мест на отдельные сообщения / страницы? Как реализовать средство просмотра изображений и ротатор? Изменить текст описания в библиотеке изображений Печенье, установленное в плагине, видимое в админ, но не на переднем Как получить данные из Advanced Custom post при поиске определенного ключевого слова или имени поля, связанного с этим сообщением? Получить миниатюру сообщения из подстраниц с петлей foreach Могу ли я создать родительскую страницу в блоге и отобразить ли она абзац / миниатюру некоторых записей?

Использование запроса WP для поиска по нескольким мета-полям

Я создал пользовательскую форму поиска с полями выбора и текстовыми полями.

У меня есть поле выбора с такими вариантами, как «аренда» и «продажа» (его сайт недвижимости). Также есть поля ввода для минимальной и максимальной цены, для местоположения и т. Д.

В сообщениях у меня есть настраиваемые поля для всех этих фильтров.

Для этого я использовал WP_Query. И это должно сработать. Вот запрос:

// Define the arguments for the WP query $args = array( 'post_type' => 'post', 'relation' => 'AND', 'meta_query' => array( array( 'key' => 'ex_lokacija', 'value' => $grad , 'compare' => 'LIKE' ), array( 'key' => 'ex_vrsta_oglasa', 'value' => $adType , 'compare' => 'LIKE' ), array( 'key' => 'ex_tip_nekretnine', 'value' => $realEstateType , 'compare' => 'LIKE' ), array( 'key' => 'ex_dio_pg', 'value' => $dioGrada , 'compare' => 'LIKE' ), array( 'key' => 'ex_dio_pg', 'value' => $dioGrada , 'compare' => 'LIKE' ), array( 'key' => 'et_square_footage', 'value' => array( $squareFrom, $squareTo ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'et_price', 'value' => array( $priceFrom, $priceTo ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'et_bedrooms_number', 'value' => $roomsNum, 'type' => 'numeric', 'compare' => 'LIKE' ) ) ); $searched_posts = new WP_Query( $args ); 

Я использовал preg_replace для каждого из $ _GET-варов и назначил их тем, что вы видите в «значении».

Теперь проблема в том, что она ничего не показывает, даже если должны быть результаты.

Кроме того, он не будет работать без поля 's' – что-то должно быть помещено в него, чтобы равномерно загрузить пустую страницу результатов.

Возможная проблема №1

Я предполагаю, что есть проблема с циклом, который я создал следующим образом:

  while ($searched_posts->have_posts()) : $searched_posts->the_post(); ?> <?php the_title(); ?> <?php the_content(); ?> <?php endwhile; ?> 

Это просто для тестирования.

Возможная проблема №2

Я помещаю все это в один файл – search.php. Может быть, это вызывает проблемы?

Вот:

,,

 global $wpdb; $grad = preg_replace( '/^[0-9a-zA-Z-]/', '', $_GET['grad'] ); $adType = preg_replace( '/^[0-9a-zA-Z-]/', '', $_GET['adType'] ); $realEstateType = preg_replace( '/^[0-9a-zA-Z-]/', '', $_GET['realEstateType'] ); $dioGrada = preg_replace( '/^[0-9a-zA-Z-]/', '', $_GET['dioGrada'] ); $squareFrom = preg_replace( '/[^0-9]/', '', $_GET['squareFrom'] ); $squareTo = preg_replace( '/[^0-9]/', '', $_GET['squareTo'] ); $priceFrom = preg_replace( '/[^0-9]/', '', $_GET['priceFrom'] ); $priceTo = preg_replace( '/[^0-9]/', '', $_GET['priceTo'] ); $roomsNum = preg_replace( '/[^0-9]/', '', $_GET['roomsNum'] ); // Change the defaults if not chosen if($squareFrom == '') { $squareFrom = '0'; } if($squareTo == '') { $squareTo = '10000000'; } // Define the arguments for the WP query $args = array( 'post_type' => 'post', 'relation' => 'AND', 'meta_query' => array( array( 'key' => 'ex_lokacija', 'value' => $grad , 'compare' => 'LIKE' ), array( 'key' => 'ex_vrsta_oglasa', 'value' => $adType , 'compare' => 'LIKE' ), array( 'key' => 'ex_tip_nekretnine', 'value' => $realEstateType , 'compare' => 'LIKE' ), array( 'key' => 'ex_dio_pg', 'value' => $dioGrada , 'compare' => 'LIKE' ), array( 'key' => 'ex_dio_pg', 'value' => $dioGrada , 'compare' => 'LIKE' ), array( 'key' => 'et_square_footage', 'value' => array( $squareFrom, $squareTo ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'et_price', 'value' => array( $priceFrom, $priceTo ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'et_bedrooms_number', 'value' => $roomsNum, 'type' => 'numeric', 'compare' => 'LIKE' ) ) ); $searched_posts = new WP_Query( $args ); get_header(); ?> <div id="content-top"> <div id="menu-bg"></div> <div id="top-index-overlay"></div> <div id="content" class="clearfix"> <div id="main-area"> <?php get_template_part('includes/breadcrumbs'); while ($searched_posts->have_posts()) : $searched_posts->the_post(); ?> <?php the_title(); ?> <?php the_content(); ?> <?php endwhile; ?> </div> <!-- end #main-area --> <?php get_sidebar(); ?> <?php get_footer(); ?> 

Спасибо, что посмотрели мою проблему!

То, как вы построили этот запрос, позволяет вам иметь пустые значения. Например, если grad отсутствует, вы в конечном итоге ex_lokacija ключи ex_lokacija для пустых строк. Поскольку ваше основное отношение есть AND все термины должны «ударить», поэтому мне кажется, что было бы очень сложно получить запрос, который возвращает что-либо. Я бы построил запрос только для ключей поиска, имеющих значения.

 $meta_query = array(); if (!empty($grad)) { $meta_query[] = array( 'key' => 'ex_lokacija', 'value' => $grad , 'compare' => 'LIKE' ) } // and so on for each of your keys, then $args = array( 'post_type' => 'post', 'relation' => 'AND', 'meta_query' => $meta_query ) $searched_posts = new WP_Query( $args );