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.

[Video-Tutorial] WordPress – Adicionando novas opções no plugin Adminimize

Olá pessoal, depois de uns contratempos o blog voltou ao ar e com uma novidade, agora terá também videos-tutorias, decidir fazer, pois(por incrivel que pareça) me ocupa menos tempo do que escrever um post.

Antes que os Trolls entrem em ação vou dizer que é a primeira vez que gravo e que uso o editor/gravador de video, então tenham piedade da minha pobre alma, caso ocorra alguma bizarrice! ;)

Duvidas, criticas e sugestões, favor usar os comentários. Divirtam-se!

Usando taxonomia e posts personalizados no WordPress 3.0

Olá pessoal, faz tempo que não posto nada aqui no blog, porém venho com uma dica que provavelmente vai ajudar muita gente. Há muitos tutoriais sobre como registrar posts e taxonomia personalizada, porém não achei nenhum que mostre (de uma forma clara e objetiva)como usá-los no desenvolvimento de um tema, o que vamos ver neste tutorial é o seguinte:

Vamos fazer uma simulação para uma area especifica de um site que terá artigos sobre Séries de TV(então o novo tipo de post será séries) e serão classificados por genêros(então nossa nova taxonomia será genêro), por exemplo, ficção cientifica, terror, comedia(esses são os termos)…

Registrando um post e uma taxonomia personalizada

Para registrar um post personalizado faça o seguinte:

Abra o arquivo functions.php do seu tema e digite o seguinte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
add_action('init', 'series_register');
 
function series_register() {
 
    $labels = array(
        'name' => __('Séries'),
        'singular_name' => __('Séries'),
        'add_new' => __('Nova Série'),
        'add_new_item' => __('Adicionar nova serie'),
        'edit_item' => __('Editar Série'),
        'new_item' => __('Nova Série'),
        'view_item' => __('Ver Série'),
        'search_items' => __('Buscar Série'),
        'not_found' =>  __('Nenhuma série encontrada'),
        'not_found_in_trash' => __('Nada encontrado na Lixeira'),
        'parent_item_colon' => ''
    );
 
    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor')
      ); 
 
    register_post_type( 'series' , $args );
}
add_action('init', 'series_register');

function series_register() {

	$labels = array(
		'name' => __('Séries'),
		'singular_name' => __('Séries'),
		'add_new' => __('Nova Série'),
		'add_new_item' => __('Adicionar nova serie'),
		'edit_item' => __('Editar Série'),
		'new_item' => __('Nova Série'),
		'view_item' => __('Ver Série'),
		'search_items' => __('Buscar Série'),
		'not_found' =>  __('Nenhuma série encontrada'),
		'not_found_in_trash' => __('Nada encontrado na Lixeira'),
		'parent_item_colon' => ''
	);

	$args = array(
		'labels' => $labels,
		'public' => true,
		'publicly_queryable' => true,
		'show_ui' => true,
		'query_var' => true,
		'rewrite' => true,
		'capability_type' => 'post',
		'hierarchical' => false,
		'menu_position' => null,
		'supports' => array('title','editor')
	  ); 

	register_post_type( 'series' , $args );
}

Já registramos nosso novo post series (register_post_type( ‘series’ , $args );,  para saber mais sobre cada parâmetro da função clique no link – http://codex.wordpress.org/Function_Reference/register_post_type.

Agora vamos registrar nossa nova taxonomia genêro, no mesmo arquivo functions.php digite:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$labels = array(
    'name' => __( 'Gêneros'),
    'singular_name' => __( 'Gênero'),
    'search_items' =>  __( 'Buscar' ),
    'popular_items' => __( 'Mais usados' ),
    'all_items' => __( 'Todos os Gêneros' ),
    'parent_item' => null,
    'parent_item_colon' => null,
    'edit_item' => __( 'Add novo' ),
    'update_item' => __( 'Atualizar' ),
    'add_new_item' => __( 'Adicionar novo Gênero' ),
    'new_item_name' => __( 'Novo' )
  ); 
 
register_taxonomy('genero', array('series'),
    array(
    'hierarchical' => true,
    'labels' => $labels,
    'singular_label' => 'Gênero',
    'all_items' => 'Todos os Gêneros',
    'query_var' => true,
    'rewrite' => array( 'slug' => 'genero' ))
    );
$labels = array(
    'name' => __( 'Gêneros'),
    'singular_name' => __( 'Gênero'),
    'search_items' =>  __( 'Buscar' ),
    'popular_items' => __( 'Mais usados' ),
    'all_items' => __( 'Todos os Gêneros' ),
    'parent_item' => null,
    'parent_item_colon' => null,
    'edit_item' => __( 'Add novo' ),
    'update_item' => __( 'Atualizar' ),
    'add_new_item' => __( 'Adicionar novo Gênero' ),
    'new_item_name' => __( 'Novo' )
  ); 

register_taxonomy('genero', array('series'),
	array(
	'hierarchical' => true,
	'labels' => $labels,
	'singular_label' => 'Gênero',
	'all_items' => 'Todos os Gêneros',
	'query_var' => true,
	'rewrite' => array( 'slug' => 'genero' ))
	);

E importante observar a linha -  ‘rewrite’ => array( ‘slug’ => ‘genero’ )) – onde é reescrito a slug da taxonomia, se você quizer pode deixar ‘rewrite’ => array( ‘slug’ => ‘series/genero’ )) , assim a url fica mais organizada, por exemplo, http://www.dominio.com/series/genero/drama/ e não http://www.dominio.com/genero/drama/ o que ficaria estranha, porém caso você precise usar essa taxonomia em mais de um post personalizado, irá dar problema.

para saber mais sobre cada parâmetro clique no link – http://codex.wordpress.org/Function_Reference/register_taxonomy

Na barra lateral da sua area administrativa  deverá aparecer a seguinte estrutura:



Como exibir a página do post(como o single.php) do post pernalizado criado

Para exibir o post de um tipo de post personalizado basta ter o single.php no seu tema, porém caso você precise exibir este posts de uma forma diferente terá que criar um arquivo single-custom-post.php, então nosso arquivo se chamará single-series.php e será usada sempre que surgir uma url – http://www.dominio.com/series/slug-do-post

Como listar os termos de uma taxonomia customizada

Para listar os termos da taxonomia(genero) criada, basta as seguintes linhas:

1
2
3
<ul>
<?php wp_list_categories('taxonomy=genero'); ?>
</ul>
<ul>
<?php wp_list_categories('taxonomy=genero'); ?>
</ul>

Você pode consultar mais parâmetros da função wp_list_category() no link – http://codex.wordpress.org/Template_Tags/wp_list_categories

Como exibir todos os posts de um termo da nova taxonomia criada

A exibição dos posts dos termos é semelhante aos dos posts simples, você só precisará criar um arquivo com o nome taxonomy-taxonomy.php, então nosso arquivo irá se chamar taxonomy-genero.php, assim quando for solicitado, por exemplo a url – http://www.dominio.com/genero/drama, o arquivo taxonomy-genero.php entrará em ação e listará todos os posts assim como o arquivo category.php faz.

Como exibir todos os posts do tipo de post pernalizado criado

Para exibir todos os posts do tipo de post series faremos o seguinte:

Crie um arquivo chamado series.php, abra ele e no topo do documento digite:

1
2
3
4
5
<?php
/*
Template Name: Séries
*/
?>
<?php
/*
Template Name: Séries
*/
?>

Assim criaremos uma pagina personalizada, então crie uma nova pagina chamada Séries e em Atributos de página escolha o modelo Séries, veja a imagem a baixo.

Agora antes do loop, digite o seguinte:

1
<?php query_posts( array( 'post_type' => 'series' ) );?>
<?php query_posts( array( 'post_type' => 'series' ) );?>

onde post_type => series, indica o post que será chamado, que no nosso caso é series, para consulta outros parâmetros da função query_posts() acesse – http://codex.wordpress.org/Function_Reference/query_posts.

Nota:

Caso apareça erro 404 ao tentar carregar a alguma pagina, reescreva seu arquivo .htaccess indo em configurações > link permanentes .

É isso pessoal, há muita coisa para ser explicado ainda, mas ficará para outro post, essas novas funções não são um assunto muito complexo e sim muito amplo, dando a possibilidade de fazer muitas coisas, quem tiver algo a perguntar e/ou a acrecentar não hesite em colocar nos comentários.

Tutoriais do WordPress 3 – Habilitando o MU

Olá Pessoal, continuando os posts sobre as novas funções do WordPress 3, neste posts terá talvez a nova função mais simples de todas, simples para habilitar, porém poderosa para se trabalhar, estou falando da habilitação do MU, versão do WordPress que permite gerenciar varios sites.

Como eu já disse é muito simples habilitar, então vou linkar apenas um post do colega Luís Victor Quintas do portalwp.com.br

Se tiver problemas para trabalhar com o MU em localhost, acesse este link

Tutoriais do WordPress 3 – Posts Personalizáveis

Olá Pessoal, depois da euforia do lançamento do WordPress 3.0, com certeza todos querem saber como usar tais funcionalidades, pensando nisso vou deixar esse post sempre atualizado com os melhores links sobre a nova versão do nosso querido CMS, quem tiver mais links pra compartilhar, favor deixar nos coméntarios.

Neste falaremos sobre:

Posts Personalizáveis

(Update – 10/07/2010)

5 Links bacanas com Tutoriais do Inkscape

Depois dos 5 links bacanas com tutorias do Gimp, é a vez de nós vemos 5 links bacanas com tutorias do InkScape, vamos a eles então:

é isso ai pessoal até a próxima!!!