Campo de busca com WordPress em post_type
-
Estou criando um campo de busca no WordPress, mas eu preciso que esse campo de busca retorne posts de um post_type que eu criei, a busca recebe três campos: estado, cidade e bairro. No meu post_type esses campos são preenchidos por campos personalizados que eu criei.
Não tenho muita experiência com WordPress, ainda estou começando, sei que a busca padrão do WP só procura os dados nos campos post_title e post_content, por isso esbarrei nessa dificuldade, eu preciso buscar dentro de um post_type especifico.
Vou mostrar os códigos que eu desenvolvi até o momento.Esse é o meu campo de busca:
<form action="<?php echo get_home_url(); ?>/" method="get"> <input type="text" name="s" hidden> <select name="uf" id="uf"> <option value="">Estado:</option> <option value="AC">AC</option> <option value="AL">...</option> </select> <input name="cidade" type="text" placeholder="Cidade:"> <input name="bairro" type="text" placeholder="Bairro:"> <input type="submit" class="submit" value=" "> </form>
Um amigo me disse para fazer interceptar a busca padrão do WP, no meu functions.php eu coloquei o seguinte código:
add_action( 'pre_get_posts', 'intercepta_busca'); function intercepta_busca( $query ) { if( is_admin() ) { return; } if( $query->is_main_query() && $query->is_search() ) { $query->set( 'post_type', array('sala') ); $query->set( 'meta_query', array( 'relation' => 'OR', array( 'key' => 'estado', 'value' => $query->query_vars['s'], 'compare' => 'LIKE' ), array( 'key' => 'cidade', 'value' => $query->query_vars['s'], 'compare' => 'LIKE' ), array( 'key' => 'bairro', 'value' => $query->query_vars['s'], 'compare' => 'LIKE' ), ) ); } }
No meu search.php estou apenas dando um echo pra ver se aparece alguma coisa:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php echo get_the_title(); ?> <?php echo get_the_content(); ?> <?php echo get_the_excerpt(); ?> <?php endwhile; ?> <?php endif; ?>
Agradeço desde já.
- O tópico ‘Campo de busca com WordPress em post_type’ está fechado para novas respostas.