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.
1 2 3 4 5 6 7 8 9 10 | <?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(); ?> |
<?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?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(); ?> |
<?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.
