Custom Post Types é a função que manipula os tipos de conteúdo no WordPress, ou seja, pode-se criar conteúdos personalizados a partir da sua demanda. Isso é uma das provas mais concretas que temos hoje um CMS muito forte que não serve apenas para criar blog e/ou sites de pequeno porte.
Criando Custom Post Types
Como o assunto é muito amplo, criarei com vocês um exemplo de Notícias.
Em functions.php, adicione:
Primeiro adicionamos a função add_action, que vai abrigar dois parâmetros, o gancho (aonde vai rodar a função) e a função callback (a função que vai ser chamada com as informações). É função type_post_noticias que vai armazenar as informações do post. A variável $labels, está indicando os valores para cada título.
A variável $args é onde vamos colocar as informações do post. Explico com mais detalhes abaixo.
-
labels: Indica a variável que contém as informações do label
-
public: determina se o conteúdo pode ser visto no painel de administração, por padrão é falso.
-
publicly_queryable: determina se a consulta pode ser realizada usando o argumento post_type, por padrão ele herda o valor do public.
-
show_ui: determina se telas de adicionar e editar o post devem ser adicionadas esse tipo de post, por padrão ele herda o valor do public.
-
query_var: evita consultas ou valores de sequência, por padrão é falso.
-
rewrite: reescrita do link, por padrão é verdadeiro.
-
capability_type: define o tipo de conteúdo que o tipo de post personalizado vai seguir, por padrão é post.
-
has_archive: permite os arquivos do tipo do post, por padrão é falso.
-
hierarchial: determina que o tipo do post é hierárquico (igual o das páginas), por padrão o valor é falso
-
menu_position: determina a ordem do menu, por padrão é null (ele ficará em baixo do menu dos comentários), mas pode receber esses seguintes valores
- 5 – Em baixo do menu Post;
- 10 – Em baixo do menu mídia;
- 20 – Em baixo do menu páginas;
- 60 – Em baixo do primeiro separador;
- 100 – Em baixo do segundo separador.
-
register_meta_box_cb: Retorna a função que chamará as caixas de meta para o formulário (irei explicar à frente).
supports: determina os recursos aceitos para esse tipo de post, por padrão é vazio, por isso tem que definir, ele recebe esses valores:
- author: o autor por uma área personalizada
- title: inclui o título ao tipo do post
- editor: inclui a área de conteúdo do post (VISUAL ou HTML) e uploader de mídia
- excerpts: inclui o campo de resumo
- thumbnail: determina se o tipo de post pode inlcuir miniatura de post (https://tableless.com.br/adicionando-post-thumbnail)
- comments: inclui os comentários
- trackbacks: inclui os trackbacks
- custom-fields: inclui a baixa de Custom Fields e se os campos serão automaticamente salvos
- revisions: inclui revisões (armazenadas ou exibidas)
- page-attributes: inclui a caixa Page Attributes (são encontradas na inserção de páginas), contendo as opções de parent, template e menu order.
Para o registro do post, é necessário a função register_post_type, que abrigará dois parâmetros. No primeiro é definido o nome do post (de preferência coloque em letras minúsculas e sem espaço, uma slug) e o outro agregará as demais informações do post, neste caso, a variável $args.
Criando Taxonomias
A taxonomia é uma forma de criar um tipo de categoria para o tipo de conteúdo.
Adicione em functions.php:
Com a função register_taxonomy, registramos uma nova taxonomia. O primeiro valor aonde será definido o nome da taxonomia (de preferência de letras minúsculas e sem espaço), o segundo valor é definido o nome do tipo de conteúdo registrado, onde essa taxonomia se agregará. No array, é definido informações já explicadas acima.
Criando campos personalizados
Vamos trabalhar com a variável register_meta_box na criação de campos personalizados. Para essa variável, foi definido o valor noticias_meta_box, que será a nossa função callback, a função que vai ser chamada para a criação da meta.
Em functions.php adicione:
Retornamos a função definida para a criação de meta box, dentro dela definimos na função add_meta_box, os argumentos respectivamente, são:
- $id: o nome para o meta box, destinado para uso interno
- $title: o título da caixa
- $callback: a função que irá ser chamada para imprimir o conteúdo da caixa
- $page: o tipo de post que vão existir esse meta, para aparecer em mais de um, coloque dentro de um array, ex: array(‘noticias’, ‘post’)
- $context: em qual parte da página de edição ela vai está (normal, advanced ou side [lateral])
- $priority: em qual altura a caixa deve aparecer dentro da seção (high [alta], normal, low[baixa), a depender do valor, caixas com prioridade maior ficará encima
Depois que definimos a meta, vamos agora retornar a função que vai imprimir o conteúdo da caixa:
A função foi criada, dentro dela imprimi-se o que o Box vai conter. Para garantir que o campo retornado é necessário usar a função get_post_meta. Ela requer três argumentos: o ID do post, o nome do campo (se possível sem acentos e nem espaços) e um valor true/false determinando se a função deve retornar um valor individual ou não.
Por fim criaremos a função que vai salvar as alterações dos campos personalizados:
Inicialmente adicionamos a ação no gancho save_post com o retorno da função save_noticias_post. A função update_post_meta vai receber três argumentos, os dois primeiros serão iguais aos explicados na função get_post_meta, a única diferença que o ultimo argumento vai receber o valor alterado, caso seja alterado manualmente colocamos uma simples string com o outro valor. Neste caso a alteração será feita após o envio do formulário.
Criando um LOOP personalizado
Vamos criar o LOOP personalizado de acordo com o tipo de post, caso ainda não tenha visto o que seja um LOOP, veja
Aonde queria que aparecesse a repetição, adicione:
O único termo desconhecido no Loop é a função get_the_term_list, que vai retornar a taxonomia para o post. O primeiro argumento é o valor do ID do post, o segundo valor é o nome definido da taxonomia, o terceiro valor é o que vai retonar antes de retornar as taxonomias e o último o separador.
Não há dificuldade, o segredo está na variável $newsArgs, que é aonde você vai definir as opções da repetição, ele pode receber mais argumentos, que você pode ver em: https://codex.wordpress.org/Function_Reference/WP_Query
Para visualizar um post, editamos as informações no arquivo single.php do nosso tema, quando temos um Custom Post Type, por padrão ele lê com essa página, caso queria ter uma pagina só para o tipo de post, você pode uma nova página chamada single-{slug}.php, ou seja, essa slug seria trocada pelo nome do Custom Post Type, no nosso caso, single-noticias.php.
Feeds para tipos de post personalizado
Se seu site existe muitos leitores via feed e você quer mostrar o conteúdo personalizado, como fazer? Lendo um livro, WordPress 3 Básico (livro que indico para iniciantes ou desenvolvedores natos), achei essa solução, muito simples.
Em functions.php, adicione:
No código vamos adicionar o filtro para a consulta de conteúdo para o Feed, você pode adicionar inúmeros conteúdos personalizados.
Reduzindo o código
Existe mesmo a necessidade para registrar o Custom Post Type a quantidade de argumentos que foi mostrado? Não.
Neste artigo fez questão de mostrar a maioria das variáveis, mas você pode reduzir o código ainda mais em futuras alterações. Em vez de registrar o seu conteúdo com aquele código enorme, pode-se substituir por:
Ambas as formas estão corretas.