Dev (Back & Front)ARTIGO

Guia definitivo para criar Custom Post Types – Parte 04

Esta série de artigos pretende ser um complemento de estudo tanto para iniciantes como para profissionais em como programar Custom Post Types no WordPressWordPress9 conteúdosAndroid push notifications com Quasar Framework, Firebase e integração com WordPressDev (Back & Front) · mai 2019Simplificando a acessibilidade de documentos: introduzindo a integração do ONLYOFFICE DocSpace com WordPress e DrupalDev (Back & Front) · abr 2024Como criar seu site WordPress com um único prompt de IA em minutos?Dev (Back & Front) · mar 2025Ver tudo em Dev (Back & Front) . Não esqueça de ler o primeiro, segundo e terceiro artigos desta série. Fique atento: todos os códigos desta série servem apenas como exemplo. Você pode e DEVE fazer as suas experiências ao modificar o código a seu gosto e necessidades.

Neste artigo da série iremos tratar de extender e usar de uma forma mais customizada as taxonomias nos nossos tipos de post.

Sumário

  • Extender, acrescentando novos campos às taxonomias
  • Apresentar as taxonomias personalizadas no website
  • Criar um filtro a partir da taxonomia na página de listagem de Post Types

As taxonomias personalizadas foram iniciadas no ciclo da versão 2.8 do WordPress tendo a API sido acabada na versão 2.9, antes do lançamento dos Custom Post Types. Com esta nova funcionalidade, os desenvolvedores tiveram a possibilidade de criar novos tipos de categorias para as publicações e páginas, extendendo dessa forma o tipo de categorização disponível. Com isto iniciou-se um novo ciclo para o WordPress: de gestor de sites para um verdadeiro CMS personalizável.

É possível criar taxonomias para categorizar não só publicações e páginas mas também os nossos Post Types.

Pegando no nosso Post Type Filme, e na categoria personalizada que criamos no primeiro artigo, vamos extendê-la de modo a termos mais campos para além dos habituais.

Extender, acrescentando novos campos às taxonomias

Por padrão, as taxonomias apresentam apenas três campos – Título, Slug e Descrição – e sem a possibilidade de acrescentar ou retirar campos.

No entanto, com um plugin que cria a funcionalidade de metadata nas taxonomias, conseguimos atingir da mesma forma o pretendido.

No nosso caso, iremos criar um campo muito simples, uma caixa de input onde poderemos colocar a URL de uma imagem que será usada como imagem de destaque da categoria de filmes. Que tal? Vamos então!

Para começar, colocamos o código que está no primeiro artigo desta série para criar a nossa taxonomia. Agora que temos a nossa taxonomia instalada, vamos extendê-la.

Em seguida, fazemos o download do plugin e o instalamos da mesma forma como outro plugin qualquer.

Existem vários plugins para criar esta funcionalidade, no entanto este é aquele com que prefiro trabalhar e que recomendo.

Depois de instalado e configurado, já temos a estrutura necessária para trabalhar com estes campos das taxonomias personalizadas. Desta forma, basta mapear quatro ações para realizarem a tarefa de nos criar a interface visual entre os campos e o WordPress:

add_action( 'film_category_add_form_fields', 'film_category_add', 10, 2);
add_action( 'film_category_edit_form_fields', 'film_category_edit', 10, 2);
add_action( 'edited_film_category', 'film_category_save', 10, 2);
add_action( 'save_film_category', 'film_category_save', 10, 2);

Estas quatro ações irão, juntamente com as funções que chamam, criar os campos na página de adição de termos  – <taxonomia>_add_form_fields e save_<taxonomia> – e os campos na página de edição dos termos da taxonomia – <taxonomia>_edit_form_fields e save_<taxonomia>. Estes dois conjuntos existem pois as páginas de criação e de edição dos termos das categorias é diferente.

Agora que temos as ações mapeadas, vamos acrescentar as funções que são necessárias:

function film_category_add( $tag ) {
?>
<div class="form-field">
<p style="color:#222;font-style:normal;">Imagem:</p>
<input type="text" name="image" id="image" value="" />
<p>Adicionar uma imagem de destaque para esta categoria.</p>
</div>
<?php
}

function film_category_edit( $tag, $taxonomy ) {
$image = get_term_meta( $tag->term_id, '_category_image', true );
?>
<tr class="form-field">
<th scope="row" valign="top">
<p style="color:#222;font-style:normal;">Imagem:</p>
</th>
<td>
<input name="image" id="image" type="text" value="<?php echo $image; ?>" />
<p>Adicionar uma imagem de destaque para esta categoria.</p>
</td>
</tr>
<?php
}

Estas funções são muito simples. A primeira apenas apresenta um HTML que desenha o campo de input para se colocar o URL da imagem.

A segunda função é mais complexa, pois é a função que é usada na edição dos termos das taxonomias. Primeiro, através da função get_term_meta() – uma das funções adicionadas pelo plugin que instalamos há pouco – retornamos para a variável $image o URL definido pelo usuário, apresentando-o em seguida no campo de input.

Neste momento os campos são apresentados na interface do WordPress, porém nenhum valor é guardado quando se salva um termo dessa taxonomia. Precisamos ainda definir a função que guarda os valores:

function film_category_save( $term_id ) {
// Se foi inserido algum valor no campo...
if ( isset( $_POST['image'] ) )
// ...guarda esse valor
update_term_meta( $term_id, '_film_category_image', strip_tags( $_POST['image'] ) );

// senão...
else
// Remove esse valor
delete_term_meta( $term_id, '_film_category_image' );

return $term_id;

}

Esta função é muito simples: caso o valor ‘image’ exista (ou seja, caso o usuário preencha o campo de imagem) ela guarda esse valor, senão ela remove o valor anterior, pois, caso o campo esteja em branco, é provável que o usuário queria remover essa imagem do termo da taxonomia.

E estamos prontos! O nosso campo personalizado irá aparecer na interface.

Apresentar as taxonomias personalizadas no website

Como visto no segundo artigo desta série, a hierarquia de templates WordPress é bastante complexa, dando a possibilidade de se construir o que se quiser. No caso da apresentação de posts em taxonomias, só necessitamos de um template: taxonomy-<taxonomia>.php

No nosso caso, primeiro vamos criar um arquivo no nosso tema com o nome taxonomy-film_category.php para receber toda a lógica programática de apresentação dos nossos filmes:

<h1 class="entry-title">
<?php single_tag_title(); ?>
</h1>

<div class="entry-thumbnail">
<img src="<?php echo get_term_meta( $tag->term_id, '_category_image', true ); ?>" />
</div>

<?php if ( have_posts() ) : while( have_posts() ) : the_post(); ?>

<div class="entry-title"><?php the_title(); ?></div>
<div class="entry-content"><?php the_content(); ?></div>

<?php endwhile; endif; ?>

Este é o código responsável pela apresentação dos filmes dentro de cada termo da taxonomia. A diferença para com o código do artigo anterior prende-se com o uso de uma tag H1 e da função single_tag_title().

Esta é reponsável por apresentar o título da taxonomia que estamos a navegar – por exemplo, se estivermos a ver a categoria Drama, esta função imprime Drama na tela.

Novamente usamos a função get_term_meta() para retornar deste modo o URL da imagem que se definiu na administração para cada categoria de filmes.

Com alguns ajustes de HTML e CSS conseguimos atingir algo como isto, em que a imagem da esquerda é a que usámos colocando o seu URL na caixa de input:

É possível criar e extender muito este exemplo, que deve ser trabalhado e usado para os seus próprios fins. Basta dar uso à criatividade.

Criar um filtro por taxonomia na página de listagem de Post Types

Se você visualizar a página de listagem dos Posts na sua administração, verá que no topo existem uma série de filtros, sendo que um deles é filtrar os posts por categoria. É essa funcionalidade que iremos apresentar nesta seção, filtrando os filmes por categoria.

Com uma simples ação é possível colocar uma caixa dropdown com as categorias da taxonomia film_category. Desta forma atingimos algo parecido, apresentando no campo da filtragem a seguinte caixa:

Este é o código necessário:

add_action( 'restrict_manage_posts', 'film_retrict_categories' );

function film_retrict_categories() {
// Acesso às variáveis do tipo de post atual e o array do pedido
global $typenow, $wp_query;

// Se o tipo de post for diferente de film não faz nada
if ( $typenow != 'film' )
return false;

// Imprime uma select box com todos os termos da taxonomia film_category
wp_dropdown_categories(array(
'show_option_all' => 'Mostrar tudo',
'taxonomy' => 'film_category',
'name' => 'film_category',
'orderby' => 'name',
'selected' => $wp_query->query['term'],
'hierarchical' => true,
'depth' => 3,
'show_count' => true,
'hide_empty' => true,
)
);
}

Ao chamarmos a ação restrict_manage_posts com a nossa função, temos a possibilidade de acrescentar HTML na zona de filtragem, no cabeçalho da tabela de listagem.

Primeiro, caso o Post Type não seja film, a função retorna sem continuar a sua atividade, assim apenas aplicamos este filtro nas páginas de listagem dos filmes.

A função wp_dropdown_categories é responsável pela impressão da dropdown das categorias da taxonomia passada como argumento, no nosso caso film_category. Não irei me delongar mais sobre os argumentos desta função pois dariam um artigo inteiro, porém deixo o link para estudo mais profundo.

Espero que este artigo tenha sido útil para criar seu plugin que tanto deseja!

Não esqueça de ler os outros artigos desta série:

Até a próxima!

é o fundador da Escola Dinheiro. Empreendedor e blogueiro, trabalha em tempo integral na internet e dedica a sua vida à produção e compartilhamento de conteúdos numa rede de projetos que conta já com alguns dos maiores e mais reconhecidos blogs do Brasil e de Portugal, nomeadamente o Escola Dinheiro, Escola WordPress e também a Galeria de Blogs. É estudante de Engenharia Informática em Sistemas de Informação e totalmente viciado em Web2.0. Paulo Faustino é também palestrante e consultor em gestão de campanhas de afiliação, otimização de blogs WordPress e ainda monetização/rentabilização de websites e blogs. No Twitter, siga @escoladinheiro.

Ver perfil