Pesquisa com filtro simples no WordPress

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.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">