Advertisement
  1. Code
  2. WordPress
  3. Plugin Development

Um Guia para o Custom Post Types do Word Press: Criação, Exibição e Meta Boxes

Scroll to top
Read Time: 11 min
This post is part of a series called A Guide to WordPress Custom Post Types.
WordPress Custom Post Types: Taxonomies, Admin Columns & Filters

() translation by (you can also view the original English article)

O WordPress foi construído para personalização. Foi criado de tal maneira que cada uma das seções seja customizável. Nesse tutorial eu explorarei uma das mais poderosas características do WordPress conhecida como Custom Post Type e como o WordPress atingiu um novo patamar com o advento desse recurso maravilhoso.


O Que Realmente São Custom Post Types?

Suponha que você quer ter uma seção separada no seu blog para Resenhas de Filmes. Usando o Custom Post Types você pode criar um novo tipo de item, como Postagens e Páginas, que contenham um tipo diferente de dados. Ele terá um novo menu de administração, dedicado a edição de páginas, taxonomia personalizada e muitos outros utilitários necessários para uma publicação completa.

Custom Post Types são um novo conjunto de opções administrativas que aparecem junto com as postagens personalizadas padrão. tais como Postagens, Páginas, Anexos, etc. O Custom Post Type pode armazenar qualquer tipo de informação. Tem um editor dedicado, carregador de mídia e usa o estrutura de tabela existente no WordPress para um gerenciamento fácil dos dados. A maior vantagem em criar tipos de postagens personalizadas usando o API do WordPress é que ele se equipa bem com os temas e modelos existentes. O Custom Post Types também são SEO amigáveis por causa dos seus permalinks elegantes.


Porque usar Custom Post Types?

O Custom Post Types nos ajuda a manter os diferentes tipos de postagens em diferentes recipientes. Ele separa as postagens regulares das outras. Simples o suficiente!


Vamos Criar um Plugin para Custom Post Type.

Aqui nós vamos criar um plugin de postagem personalizada que vai mostrar nossas resenhas de filmes favoritas. Vamos começar.

Passo 1: Criando um Diretório de Plugin no WordPress.

Abra o seu diretório de Plugin do WordPress e crie um novo diretório chamado Resenhas-Filme.

Passo 2: Crie um arquivo PHP

Abra o diretório e crie um arquivo PHP chamado Resenhas-Filme.php.

Passo 3: Adicione Cabeçalho

Abra o arquivo e adicione o cabeçalho apropriado no topo.

1
<?php
2
/*

3
Plugin Name: Movie Reviews

4
Plugin URI: https://wp.tutsplus.com/

5
Description: Declares a plugin that will create a custom post type displaying movie reviews.

6
Version: 1.0

7
Author: Soumitra Chakraborty

8
Author URI: http://wp.tutsplus.com/

9
License: GPLv2

10
*/
11
?>

Passo 4: Registre a Função Customizada

Antes de fechar o comando PHP, digite a seguinte linha de código para executar a função personalizada nomeie create_movie_review durante a fase de inicialização toda vez que a página é gerada.

1
add_action( 'init', 'create_movie_review' );

Passo 5: Implementação da Função

Provê a implementação da função create_movie_review.

1
function create_movie_review() {
2
  register_post_type( 'movie_reviews',
3
		array(
4
			'labels' => array(
5
				'name' => 'Movie Reviews',
6
				'singular_name' => 'Movie Review',
7
				'add_new' => 'Add New',
8
				'add_new_item' => 'Add New Movie Review',
9
				'edit' => 'Edit',
10
				'edit_item' => 'Edit Movie Review',
11
				'new_item' => 'New Movie Review',
12
				'view' => 'View',
13
				'view_item' => 'View Movie Review',
14
				'search_items' => 'Search Movie Reviews',
15
				'not_found' => 'No Movie Reviews found',
16
				'not_found_in_trash' => 'No Movie Reviews found in Trash',
17
				'parent' => 'Parent Movie Review'
18
			),
19
20
			'public' => true,
21
			'menu_position' => 15,
22
			'supports' => array( 'title', 'editor', 'comments', 'thumbnail', 'custom-fields' ),
23
			'taxonomies' => array( '' ),
24
			'menu_icon' => plugins_url( 'images/image.png', __FILE__ ),
25
			'has_archive' => true
26
		)
27
	);
28
}

A função register_post_type faz a maior parte do trabalho para nós. Assim que é chamada ela prepara o ambiente do WordPress para um novo tipo de postagem personalizada incluindo diferentes seções no administrador. Essa função requer dois argumentos: o primeiro é um name único do tipo de postagem personalizada e o segundo é uma ordem demonstrando as propriedades o novo tipo de postagem personalizada. Aqui está outra matriz contendo os diferentes rótulos, que indicam os caracteres de texto a serem mostrados nas diferentes seções do tipo de postagem personalizada, ex. 'name' mostra o tipo de postagem personalizada nome no painel, 'edit' e 'view' são mostrados nos botões editar e exibir respectivamente. Eu acho que o restante é bem autoexplicativo.

Nos próximos argumentos:

  • 'public' => true determina a visibilidade do tipo de postagem personalizada tanto no painel administrador como no front end.
  • 'menu_position' => 15 determina a posição do tipo de postagem personalizada.
  • 'supports' => array( 'title', 'editor', 'comments', 'thumbnail', 'custom-fields' ) determina as características do tipo de postagem personalizada que serão mostradas. 
  • 'taxonomies' => array( '' ) cria uma taxonomia personalizada. Aqui não está definida.
  • 'menu_icon' => plugins_url( 'images/image.png', __FILE__ ) mostra o ícone do menu administrador
  • 'has_archive' => true habilita o arquivamento do tipo de postagem personalizada.

Por favor visite a página do Codex do WordPress register_post_type para mais detalhes dos diferentes argumentos usados em tipos de postagem personalizada.

Passo 6: Ícone para Tipo de Postagem Customizada

Salve uma imagem de ícone de 16x16 pixel na sua pasta de plugin atual. Isso é necessário para o ícone do tipo de postagem personalizada no painel de controle.

Passo 7: Ativando o Plugin

Ative o plugin e é isso, você tem um novo tipo de postagem personalizada que tem um editor de texto, publicação e controle de imagem em destaque, controle de comentários e editor de campo personalizado. 

Passo 8: Adicionando um Item Novo

Clique na opção Add New para ir ao editor tipo de postagem personalizada. Fornece um título do filme, uma resenha e configura a imagem em destaque.

Passo 9: Publicar

Publique o post e clique no Ver Resenha de Filme para ver a resenha de filme que criou no navegador.


Criando Campo de Meta Box para o Custom Post Types

O mecanismo de meta box usa a ajuda do sistema de meta box construído dentro do WordPress e ajuda a adicionar campos necessários especificamente para os tipos de postagens personalizadas, sem precisar de campos de personalização padrões no editor.

Passo 1: Registrando a Função Personalizada

Abrir o arquivo Movie-Reviews.php e acrescenta o seguinte código antes da tag de fim do PHP. Isso registra a função a ser chamada quando a interface de administrador do WordPress é visitada.

1
add_action( 'admin_init', 'my_admin' );

Passo 2: Implementação da Função Customizada

Adicione uma implementação da função my_admin que registra um meta box e associa com o tipo de postagem personalizada movie_reviews.

1
function my_admin() {
2
	add_meta_box( 'movie_review_meta_box',
3
		'Movie Review Details',
4
		'display_movie_review_meta_box',
5
		'movie_reviews', 'normal', 'high'
6
	);
7
}

Aqui add_meta_box  é a função usada para adicionar os meta boxes aos tipos de postagem personalizada. Explicação dos atributos dados:

  • movie_review_meta_box é um atribituto HTML id obrigatório.
  • Movie Review Details é o texto visível no cabeçalho da seção meta box.
  • display_movie_review_meta_box é o callback que processa o conteúdo da meta box.
  • movie_reviews é o nome do tipo de postagem personalizada onde a meta box será exibida.
  • normal define a parte da página onde a seção de edição de tela será mostrada.
  • high define a prioridade dentro do contexto onde as caixas devem mostrar.

Passo 3: Implementação da Função  display_movie_review_meta_box

1
<?php
2
function display_movie_review_meta_box( $movie_review ) {
3
	// Retrieve current name of the Director and Movie Rating based on review ID

4
	$movie_director = esc_html( get_post_meta( $movie_review->ID, 'movie_director', true ) );
5
	$movie_rating = intval( get_post_meta( $movie_review->ID, 'movie_rating', true ) );
6
	?>
7
	<table>
8
		<tr>
9
			<td style="width: 100%">Movie Director</td>
10
			<td><input type="text" size="80" name="movie_review_director_name" value="<?php echo $movie_director; ?>" /></td>
11
		</tr>
12
		<tr>
13
			<td style="width: 150px">Movie Rating</td>
14
			<td>
15
				<select style="width: 100px" name="movie_review_rating">
16
				<?php
17
				// Generate all items of drop-down list

18
				for ( $rating = 5; $rating >= 1; $rating -- ) {
19
				?>
20
					<option value="<?php echo $rating; ?>" <?php echo selected( $rating, $movie_rating ); ?>>
21
					<?php echo $rating; ?> stars <?php } ?>
22
				</select>
23
			</td>
24
		</tr>
25
	</table>
26
	<?php
27
}
28
?>

Esse código processa o conteúdo da meta box. Aqui nós usamos uma variável de objeto que contém a informação de cada uma das resenhas de filme exibidas no editor. Usando esse objeto nós recuperamos a post ID e usamos isso para perguntar ao banco de dados e conseguir o nome do Diretório associado e a Classificação que por sua vez processa os campos na tela. Quando uma nova entrada é adicionada o get_post_meta retorna uma string vazia que resulta em mostrar campos vazios na meta box.

Passo 4: Registrando uma Função Postagem Salva

1
add_action( 'save_post', 'add_movie_review_fields', 10, 2 );

Essa função é chamada quando a postagem é salva na base de dados.

Passo 5: Implementação da Função add_movie_review_fields

1
function add_movie_review_fields( $movie_review_id, $movie_review ) {
2
	// Check post type for movie reviews

3
	if ( $movie_review->post_type == 'movie_reviews' ) {
4
		// Store data in post meta table if present in post data

5
		if ( isset( $_POST['movie_review_director_name'] ) && $_POST['movie_review_director_name'] != '' ) {
6
			update_post_meta( $movie_review_id, 'movie_director', $_POST['movie_review_director_name'] );
7
		}
8
		if ( isset( $_POST['movie_review_rating'] ) && $_POST['movie_review_rating'] != '' ) {
9
			update_post_meta( $movie_review_id, 'movie_rating', $_POST['movie_review_rating'] );
10
		}
11
	}
12
}

Essa função é executada quando as postagens são salvas ou apagadas a partir do painel administrador. Aqui, depois de checar o tipo de dado de postagem recebido, se é um Custom Post Type então ele verifica de novo para ver se os elementos meta box estão com valores atribuídos e finalmente armazena os valores nesses campos.

Passo 6: Desabilitando a Opção Campos Personalizados Padrão

Quando criamos o tipo de postagem personalizada, nós definimos a função create_movie_review. Remover o elemento custom-fields  da ordem no supports porque ele não é mais necessário. Agora, se você salvar o arquivo e abrir o editor Resenha de Filmes você observará que dois campos na meta box chamados Autor do Filme e Classificação do Filme. De forma semelhante você pode acrescentar outros elementos também.


Criando um Modelo Personalizado Dedicado para o Custom Post Types

A maneira apropriada para exibir os dados do tipo de postagem personalizada é usando um modelo customizado para cada tipo de postagem personalizada. Aqui nós vamos criar um modelo que exibe todas as Resenhas de Filme que entraram usando o Custom Post Type Resenha de Filme.

Passo 1: Registre a Função para Forçar o Modelo Dedicado

Abra o arquivo Movie-Reviews.php e acrescente o seguinte código antes da tag final do PHP. Isso registra a função a ser chamada quando a interface de administrador do WordPress é visitada.

1
add_filter( 'template_include', 'include_template_function', 1 );

Passo 2: Implementação da função.

1
function include_template_function( $template_path ) {
2
	if ( get_post_type() == 'movie_reviews' ) {
3
		if ( is_single() ) {
4
			// checks if the file exists in the theme first,

5
			// otherwise serve the file from the plugin

6
			if ( $theme_file = locate_template( array ( 'single-movie_reviews.php' ) ) ) {
7
				$template_path = $theme_file;
8
			} else {
9
				$template_path = plugin_dir_path( __FILE__ ) . '/single-movie_reviews.php';
10
			}
11
		}
12
	}
13
	return $template_path;
14
}

Aqui o código procura por um modelo como single-(nome do tipo de postagem).php no diretório tema atual. Se ele não é encontrado então ele procura pelo modelo dentro diretório do plugin, que nós fornecemos como parte do plugin. O gancho template_include foi usado para alterar o comportamento padrão e reforçar um modelo específico.

Passo 3: Criando o Arquivo da Página Única de Modelo

Após salvar o arquivo de plugin aberto anteriormente, crie outro arquivo PHP com nome single-movie_reviews.php e coloque o seguinte código nele.

1
<?php
2
 /*Template Name: New Template

3
 */
4
5
get_header(); ?>
6
<div id="primary">
7
	<div id="content" role="main">
8
	<?php
9
	$mypost = array( 'post_type' => 'movie_reviews', );
10
	$loop = new WP_Query( $mypost );
11
	?>
12
	<?php while ( $loop->have_posts() ) : $loop->the_post();?>
13
		<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
14
			<header class="entry-header">
15
16
				<!-- Display featured image in right-aligned floating div -->
17
				<div style="float: right; margin: 10px">
18
					<?php the_post_thumbnail( array( 100, 100 ) ); ?>
19
				</div>
20
21
				<!-- Display Title and Author Name -->
22
				<strong>Title: </strong><?php the_title(); ?><br />
23
				<strong>Director: </strong>
24
				<?php echo esc_html( get_post_meta( get_the_ID(), 'movie_director', true ) ); ?>
25
				<br />
26
27
				<!-- Display yellow stars based on rating -->
28
				<strong>Rating: </strong>
29
				<?php
30
				$nb_stars = intval( get_post_meta( get_the_ID(), 'movie_rating', true ) );
31
				for ( $star_counter = 1; $star_counter <= 5; $star_counter++ ) {
32
					if ( $star_counter <= $nb_stars ) {
33
						echo '<img src="' . plugins_url( 'Movie-Reviews/images/icon.png' ) . '" />';
34
					} else {
35
						echo '<img src="' . plugins_url( 'Movie-Reviews/images/grey.png' ). '" />';
36
					}
37
				}
38
				?>
39
			</header>
40
41
			<!-- Display movie review contents -->
42
			<div class="entry-content"><?php the_content(); ?></div>
43
		</article>
44
45
	<?php endwhile; ?>
46
	</div>
47
</div>
48
<?php wp_reset_query(); ?>
49
<?php get_footer(); ?>

Nós criamos uma página básica de modelo usando o loop. A função query_posts recupera os elementos do tipo de postagem personalizada e os exibe usando o loop. É claro que é apenas um loop básico e você pode brincar com ele conforme quiser. Você pode usar também os estilos CSS adequados para formatar os elementos adequadamente.

Nota: Você precisa criar uma nova página a partir do painel de controle usando o modelo recém criado.

Passo 4: Imagens

Você  vai precisar salvar duas imagens de ícones de estrela de 32x32 pixel na sua pasta plugin. Dê o nome de icon.png e grey.png respectivamente. Isso é tudo, agora as resenhas de filmes são mostradas em uma única página filtradas por data.

No meu próximo tutorial eu vou abranger mais recursos do Custom Post Types como criando um página arquivada, criando taxonomias customizadas, personalizando colunas, etc. Sinta-se livre para fornecer suas valiosas sugestões.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.