Depois de muito tempo hibernando sem postar nada devido a correria do dia-a-dia voltei com mais um tutorial para WordPress, dessa vez vamos ver como fazer um filtro de pesquisa simples.
1° passo – Crie uma página e um arquivo para receber o resultado da pesquisa.
No caso eu criei a página como nome “Resultado da Pesquisa”, que por consequência ficou com o slug resultado-da-pesquisa, sendo assim criei também um arquivo no tema chamado page-resultado-da-pesquisa.php.
2° passo – O formulário de pesquisa.
Neste exemplo eu criei um arquivo index.php no tema para colocar o formulário de pesquisa.
<?php get_header(); ?>
<form role="search" id="searchform" method="get" action="<?php bloginfo('home'); ?>/resultado-da-busca/">
<fieldset>
<legend>Formulario de pesquisa com filtro simples</legend>
<input type="text" name="pesquisa" id="pesquisa"/>
<?php wp_dropdown_categories(array('taxonomy' => 'category', 'name' => 'cat', 'id'=> 'cat')); ?>
<input type="submit" id="searchsubmit" value="ok" class="submit"/>
</fieldset>
</form>
<?php get_footer(); ?>
Explicando: Como disse acima, o formulário de pesquisa está no arquivo index.php, insiro as templates tag para pegar o header e footer do tema(não precisa de nada em especial nos arquivos header.php e footer.php, apenas o padrão), depois crio o formulário da pesquisa com o action apontando para a página Resultado da Pesquisa criada anteriormente, na linha 5 é crio um input com o nome pesquisa que será usado posteriormente. Na linha 6 listo em um select os termos da taxonomia padrão que é category e do o nome dos campos como cat.
3° passo – editar o arquivo page-resultado-da-pesquisa.php
<?php get_header(); ?>
<h1>Resultados da pesquisa</h1>
<?php
$termo_pesquisa = trim($_GET['pesquisa']);
$cat_pesquisa = $_GET['cat'];
$pesquisa_query = $wpdb->get_results( "SELECT * FROM ".$wpdb->posts." p, ".$wpdb->term_relationships." t_r WHERE p.ID = t_r.object_id AND term_taxonomy_id = ".$cat_pesquisa." AND post_status = 'publish' AND post_type = 'post' AND post_title LIKE '%".$termo_pesquisa."%' ORDER BY post_modified_gmt" );
foreach($pesquisa_query as $resultado)
{
echo '<div class="post">';
echo '<h2>'. $resultado->post_title . '</h2>';
echo '<p>'. $resultado->post_content . '</p>';
echo '</div>';
}
?>
<?php get_footer(); ?>
Explicando: Nas linha 4 e 5 pego respectivamente os valores que foram digitados nos campos do formulário de pesquisa, depois uso a classe “wpdb” do WordPress para resgatar todos os valores das tabelas (wp_)posts e (wp_)term_relationships cujo valor da coluna ID da tabela posts seja igual ao object_id da tabela term_relationships e o term_taxonomy_id seja igual a categoria que foi escolhida no form de pesquisa e post_status seja igual a publicado e post_type = post, depois mando ele procurar na coluna post_title algum post que no titulo contenha o termo que foi digitado e por fim ordeno pela uma data de modificação. Depois da query do SQL uso um foreach simples para resgatar os valores.
Faça o download do tema exemplo
Com um pouco mais de criatividade e conhecimento de SQL dá para se fazer coisas bem mais complexas, por enquanto é isso, divirtam-se.
Olá Marcelo, boa tarde!
Bem minha dúvida é a seguinte, eu tenho alguns campos personalizados criados para complementar minha publicação, Ex: endereço, municipio e UF.
Já coloquei para que na pesquisa só apareçam as postagem desta determinada categoria, porém queria que também o usuário possa escolher por pesquisar pelo município ou pela UF ou pela rua.
Tem como fazer esse tipo de filtragem? ou conhece algum plugin ou até mesmo algum código que possa ajudar?
Bem, desde já agradeço pela atenção e uma boa tarde.
Atenciosamente,
Leonardo Ítalo