A Hierarquia de templates é, sem dúvida, um dos assuntos mais importantes do WordPress. Não há como desenvolver um tema para o WordPress sem conhecer suas templates e qual hierarquia elas seguem.
Na tentativa de clarear o assunto o máximo possível na mente de cada um, estamos desenvolvendo alguns artigos focados nesse assunto. Já passamos pela introdução, dando uma visão geral do funcionamento da Hierarquia de Templates, e falamos também das páginas de listagem de posts.
Nesse artigo vamos dar uma olhada sobre as templates para páginas singulares, ou single. Essas templates são utilizadas sempre que acessamos uma url de um post, página, ou de um tipo de conteúdo personalizado. A página que estamos lendo mesmo, é uma single de post.
Singular de posts
Como visto acima, a página que estamos visualizando nesse momento é uma página single. Uma single de um post padrão do WordPress. Mas então, qual arquivo dentro do tema desse site está sendo utilizado para exibir o conteúdo desse post?
Na Hierarquia de Templates do WordPress, um post padrão é considerado um Blog Post, portanto, analisando a imagem acima percebemos 3 templates que podem ser criadas no tema para essa exibição.
Caso o layout da interna de posts seja semelhante ao de páginas, temos a template mais genérica para esse caso que é a singular.php, que já foi objeto de outro artigo do blog. Uma template ainda genérica, pois serve tanto para o tipo de conteúdo post padrão do WordPress, é a single.php, que costuma ser a mais comumente utilizada.
Sendo mais específico, ou seja, caso tenhamos uma interna de posts diferente da interna de outros tipos de conteúdo personalizado, devemos utilizar a single-post.php.
Singular de páginas estáticas
Páginas estáticas é todo o conteúdo que adicionamos no menu Páginas da administração do WordPress. Além da singular.php, uma template genérica para a exibição desse conteúdo é a template page.php.
Sendo mais específico na criação da template, podemos utilizar como referência o id ou o slug da página criada. Por exemplo a página com o título Produtos, provavelmente terá o slug produtos, assumindo que ela também terá o id igual a 28, podemos ter as templates, page-28.php ou page-produtos.php no nosso tema, para exibir o conteúdo somente dessa página.
O modelo do parágrafo acima pode até parecer interessante mas, sinceramente podemos e devemos evitá-lo, pois não temos como controlar o ID que uma página terá nos diversos ambientes (local, produção, etc) possíveis.
Um modelo mais elegante e 100% recomendado por nós é a utilização de templates customizadas de páginas. Criamos um arquivo com qualquer nome no tema, e na primeira linha desse arquivo colocamos um comentário em PHP com o nome da template:
/** Template Name: Produtos */
Assim, quando acessarmos a administração para incluir uma nova página poderemos ver no metabox de Atributos de Página o modelo que criamos.
E ainda podemos deixar nosso tema mais organizado colocando o arquivo criado separadamente em uma pasta dentro do tema.
Singular de tipos de posts personalizados
Além de singular.php e single.php, as templates genéricas para o caso, podemos utilizar uma template com o nome definido para o tipo de conteúdo personalizado (CPT).
Por exemplo, caso tenhamos um CPT com o slug apiki-produtos, podemos exibir a interna de um post desse tipo de conteúdo utilizando o arquivo single-apiki-produtos.php. O slug a ser utilizado é o primeiro parâmetro informado na função register_post_type do WordPress.
Singular de anexos
Toda o arquivo que subimos via upload do WordPress vira um post no banco de dados, e por isso, também tem uma template na hierarquia de arquivos para ser exibido, também tem sua página singular. Volte ao primeiro tópico desse artigo e clique na imagem da hierarquia de arquivos que temos lá, seremos redirecionados para essa template.
Para esse caso também podemos utilizar as genéricas singular.php e single.php, além de termos a possibilidade de mais uma, attachment.php, que exibirá todos os tipos de anexo.
Podemos ainda ter templates específicas de acordo com o tipo do anexo, por exemplo, image.php para todas as imagens, video.php entre outros, basta você saber o tipo do anexo que precisa ter um layout diferente. Dentro do tipo ainda podemos especificar pelo subtipo do arquivo, por exemplo arquivos text/plain podem ser exibidos utilizando a template text.php, plain.php ou ainda text_plain.php.