A relação de Questão de Meta “E”, então, configure a matriz de acordo

Eu tenho um formulário de pesquisa na minha página inicial que configura a URL query_string em conformidade para o código abaixo. Quando uso ou obtenho resultados. No entanto, quando usei “E” para a relação, não obtenho nenhum resultado, pois o usuário pode selecionar quantas opções quiserem ao pesquisar (há três como visto abaixo na consulta)

Como alguém sugeriria alterar a consulta para que ele tenha que procurar os resultados exatos usando “AND”, mas digamos que o usuário apenas usa o menu suspenso de seleção de sorting no formulário de pesquisa, e isso ainda retornará esses resultados. Ao contrário de não mostrar nada porque as primeiras 2 opções não estavam sendo usadas.

Formato:

 

resultados:

  'resorts', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'price', 'value' => $queryPrice, 'type' => 'NUMERIC', // 'compare' => 'BETWEEN', ), array( 'key' => 'region', 'value' => $queryRegion, // 'compare' => '=', ), array( 'key' => 'rating', 'value' => $queryRating, // 'compare' => '=', ), ) ); $query = new WP_Query( $args ); if($query->have_posts()) : while ($query->have_posts()): $query->the_post(); ?> stuff goes here, yay!  

No results found, modify your search criteria and try again!

 $meta_array = array(); $meta_array = array( 'relation' => 'AND' ); if( isset( $_POST['Price'] ) $meta_array[] = array( //THIS IS LINE 46 'key' => 'price', 'value' => $Price, 'compare' => 'REGEX' ); if( isset( $_POST['Region'] ) $meta_array[] = array( 'key' => 'region', 'value' => $Region, 'compare' => '=' ); if( isset( $_POST['Rating']) $meta_array[] = array( 'key' => 'rating', 'value' => $Rating, 'compare' => 'REGEX' ); $args = array( 'post_type' => 'resorts', 'post_status' => 'publish', 'meta_query' => $meta_array ); 

Solutions Collecting From Web of "A relação de Questão de Meta “E”, então, configure a matriz de acordo"

Não tenho a certeza se eu o vejo bem, mas se você está tentando consultar por várias meta-chaves, onde o número de meta-teclas varia, e abaixo é o que estou usando para o mesmo propósito.

Basicamente, adiciona consulta meta uma após a outra se a input correspondente é existente.

 
< ?php $meta_array = array(); $meta_array = array( 'relation' => 'AND' ); if( isset( $_POST['item_name'] ) ) $meta_array[] = array( 'key' => '_item_name', 'value' => $item_name, 'compare' => 'REGEXP' ); if( isset( $_POST['item_type'] ) ) $meta_array[] = array( 'key' => '_item_type', 'value' => $item_type, 'compare' => '=' ); if( isset( $_POST['company'] ) ) $meta_array[] = array( 'key' => '_item_companies', 'value' => $allowed_company, 'compare' => 'REGEXP' ); $args = array( 'post_type' => 'item', 'post_status' => 'publish', 'meta_query' => $meta_array ); $wp_query = new WP_Query( $args ); ?>

É claro que as variables ​​acima precisam ser alteradas para atender às suas necessidades.

Espero que seja o que você estava procurando.

Os argumentos de trabalho finais:

 < ?php if( isset( $_GET['Price'] ) ) { $meta_array[] = array( 'key' => 'price', 'value' => esc_attr($_GET['Price']) // 'compare' => '=' ); } if( isset( $_GET['Region'] ) ) { $meta_array[] = array( 'key' => 'region', 'value' => esc_attr($_GET['Region']) // 'compare' => '=' ); } if( isset( $_GET['Rating'] ) ) { $meta_array[] = array( 'key' => 'rating', 'value' => esc_attr($_GET['Rating']) // 'compare' => '=' ); } $page_id = ''; if( isset( $_GET['Title'] ) ) { $page_id = esc_attr($_GET['Title']); } $args = array( 'post_type' => 'resorts', 'page_id' => $page_id, 'post_status' => 'publish', 'orderby' => 'title', 'meta_query' => $meta_array ); $args['meta_query']['relation'] = 'AND'; $query = new WP_Query( $args ); if($query->have_posts()) : while ($query->have_posts()): $query->the_post(); ?> stuff happens < ?php endwhile; else : ?> 

No results found, modify your search criteria and try again!

< ?php endif; ?>