Taxonomias no WordPress
Taxonomia é, no mínimo, um nome estranho. Mesmo assim, o seu valor é enorme no WordPress. Pelo Wikipédia, sua sintaxe seria:
Taxonomia (do Grego verbo τασσεῖν ou tassein = “para classificar” e νόμος ou nomos = lei, ciência, administrar), foi uma vez, a ciência de classificar organismos vivos (alfa taxonomia). Mais tarde a palavra foi aplicada em um sentido mais abrangente, podendo aplicar-se a uma das duas, classificação de coisas ou aos princípios subjacentes da classificação. Quase tudo – objectos animados, inanimados, lugares e eventos – pode ser classificado de acordo com algum esquema taxonômico
Em algumas situações específicas, não tão raras, precisamos classificar algo por diversos aspectos diferentes. Por exemplo, eu posso definir uma pessoa pelo tamanho, sexo, idade, peso, nacionalidade, estado civil, se tem filhos ou não, entre diversas outras. Muitas dessas classificações são próximas, outras em nada se relacionam. Algumas podem ser definidas por uma resposta binária (sim ou não) e outras por uma resposta quantitativa ou qualitativa.

Onde esse papo entra no WordPress? Quando falamos de categorias e tags. São dois tipos básicos e nativos do WordPress para classificações taxonômicas (quase um palavrão). Além desses, tem um um pouco menos utilizado que são as categorias de links, também muito úteis.
Sabemos que pelas tags não podemos hierarquizar as palavras chave utilizadas. Não podemos definir que quem é de uma certa tag, terá que ser também de outra tag. Isso já acontece nas categorias. Você pode definir uma categoria chamada “restaurantes” e a elas vincular as subcategorias “brasileiro“, “francês“, “japonês“.
Mesmo assim ficaria complicado caso também criássemos uma categoria chamada idade, para conter sub-categorias como criança, adolescente, adulto e idoso. Ou até sexo para as subcategorias masculino ou feminino.
Não faz sentido ter que criar uma categoria chamada sexo. Podemos querer marcar uma de suas subcategorias, mas teríamos um bacalhau – ou gambiarra – que seria a categoria ascendente figurando ali pra questões de organização.
Pra isso a equipe que desenvolve WordPress já tinha pensado nessas situações e incluiram métodos prontos para trabalhar com essas situações e assim criar e manipular novas taxonomias. O problema é que a última prioridade é a documentação e infelizmente o material ainda é muito curto.
Já adianto que existem plugins prontíssimos pra trabalhar com essas taxonomias e um deles vou inclusive demostrar melhor suas funcionalidades.
São eles:
Os dois são bons, mas o “Simple“, como o próprio nome já diz, é muito simples, sendo que o Custom não é difícil e tem uma interface amigável, sendo esse com que vamos trabalhar aqui.
O plugin permite a criação de taxonomias customizadas com:
- nome título da taxonomia
- plurais pro nome
- slug pros permalinks
- tipo da taxonomia, que pode ser pra posts, páginas ou links
- possibilidade de hierarquia da taxonomia
- descrição da taxonomia
- possibilidade de escolher apenas um valor da taxonomia no máximo
A criação da taxonomia é super simples. Aparecerá um menu na administração do wordpress com o título taxonomies. O resto é fácil e intuitivo, mesmo que o plugin não esteja traduzido até o momento.
Logo após é só editar um artigo qualquer que aparecerá uma box extra com a sua taxonomia criada. Ela poderá ser apresentada de forma similar à de tags ou à de categorias.

Utilizada a taxonomia agora temos 2 formas de trabalhar com a mesma. Uma delas, a mais fácil é a sua utilização via widgets do tema. Você pode montar um cloud específico da taxonomia, por exemplo.
Também podemos a taxonomia dentro da estrutura de um tema. Essa é justamente a parte mais interessante.
Primeiro passo: criar a uma tag cloud de uma taxonomia específica:
wp_tag_cloud( array( 'taxonomy' => 'nome_da_taxonomia' ) );
Tudo o que você deve mudar nesse código acima é o ‘nome_da_taxonomia‘ para o nome da sua taxonomia criada.
Vamos ao próximo exemplo, onde buscamos uma lista dos termos de uma determinada taxonomia utilizando um método similar ao get_categories_link().
echo get_the_term_list( $post->ID, 'taxonomy_name', 'Taxonomy Label: ', ', ', '' );
Edição: fica uma dica para quem quiser transformar a listagem em uma lista html:
echo get_the_term_list( get_the_ID(), 'area-de-atuacao', '<h3 class="titulo">Áreas de atuação:</h3><ul class="lista"><li>', '</li><li>', '</li></ul>' );
Note que esse código acima deve acontecer ou dentro de um ‘loop’ do WordPress ou com a indicação de um id de post específico. Mais especificações para o método get_the_term_list no codex do WordPress.
Um alerta: se utilizar uma taxonomia ainda não criada nesse método, o template vai dar pau no meio do carregamento e seu site não vai funcionar até você resolver o problema. Em outras palavras, o get_the_term_list vai gerar um erro php e o carregamento da página será interrompido.
Como podemos registrar novas taxonomias diretamente no nosso template para evitar isso?
No arquivo functions.php basta adicionar o seguinte código, claro que antes adaptando o mesmo:
add_action( 'init', 'criar_taxonomias', 0 ); function criar_taxonomias() { register_taxonomy( 'no', 'post', array( 'hierarchical' => false, 'label' => __('Nome', 'domain'), 'query_var' => 'nome', 'rewrite' => array( 'slug' => 'nome' ) ) ); }
Isso já evita que aconteçam problemas no meio do caminho.
Como mostrar artigos apenas com um termo de uma taxonomia específica? Muito simples:
query_posts( array( 'people' => 'will-smith', 'showposts' => 10 ) );
O resto fica por conta de que se faça o loop.
Mais um passo: você já conhecia o método get_tags()? Imagino que sim, ele serve pra montar uma coleção de objetos com informações de tags. Mas agora quero mesmo é apresentar o get_terms(). Esse método vai simplesmente lhe retornar uma array com todos os termos presentes na taxonomia indicada nos parâmetros.
Algumas propriedades desses objetos são: name, slug, description, term_id, taxonomy, etc. Mais informações sobre os dados gravados no banco de dados no Codex do WordPress.
Agora é bola pra frente e fazer bom uso das suas taxonomias.

27/04/2010 às 11:25
Social comments and analytics for this post…
This post was mentioned on Twitter by leobalter: http://ow.ly/1Dte8 Taxonomias no WordPress…
27/04/2010 às 11:26
[...] This post was mentioned on Twitter by LeoCabral, Leonardo Balter. Leonardo Balter said: http://ow.ly/1Dte8 Taxonomias no WordPress [...]