A Hierarquia de templates é, sem dúvida, um dos assuntos mais importantes do WordPress. Não há como desenvolver um tema para WordPress sem conhecer suas templates e qual hierarquia elas seguem.
Nesse artigo faremos uma introdução a esse assunto, mostrando como o WordPress determina qual arquivo deve incluir e quais as peculiaridades que talvez você ainda não saiba a respeito das urls em relação à hierarquia de templates.
Os parâmetros de URL como controladores
Antes de adentrarmos pela hierarquia de templates precisamos entender o básico do funcionamento padrão do WordPress. Quando você acessa qualquer página do WordPress sabe o que acontece no servidor e como ele trata sua requisição?
Ao requisitar uma página, o WordPress utiliza os parâmetros de URL como controladores para decidir qual o arquivo de template deve ser carregado. Parâmetros de URL são as variáveis acrescentadas a uma URL após o sinal de interrogação (?) e, caso haja mais de um, são separados pelo sinal de “e comercial” (&). Por exemplo, para uma instalação nova do WordPress, acessando o post “Olá Mundo” que é criado automaticamente, teremos a URL http://seuwp.com?p=1.
O parâmetro p=1 indica para o WordPress que está sendo requisitada uma página interna de um post e que o ID desse post é 1. A partir desse momento o WordPress valida as configurações de leitura definidas na administração e acessa o banco de dados em busca de um post com o ID indicado pelo parâmetro. Encontrando no banco o post com o ID, o WordPress seleciona um arquivo no seu tema determinado pela hierarquia de templates.
Abaixo os parâmetros mais comuns que poderão ser encontrados em uma URL WordPress:
- ?p=1 – Post com ID 1
- ?page_id=2 – Página com ID 2
- ?cat=1 – Categoria de posts com ID 1
- ?tag=2 – Tags de posts com ID 2
- ?author=1 – Autor do site com ID
- ?s=teste – Busca pelo termo “teste”
- ?m=201508 – Posts do mês de Agosto/2015
E não encontrando o conteúdo requisitado?
Há casos em que o WordPress pode não encontrar no banco de dados o conteúdo que está sendo requisitado pelo parâmetro da URL, seja post, página, tag, categoria, etc. Nesses casos o WordPress identifica a URL como uma página não encontrada e passa a procurar pela template de erro 404.
Abordaremos essa template mais adiante em outro artigo.
E se meu tema não possuir a template que o WordPress procura?
Calma, o WordPress é mais esperto que isso. Para garantir que seu usuário nunca veja uma tela em branco quando requisitar uma página do seu site, sempre que o seu tema não possuir a template esperada, o WordPress incluirá o arquivo index.php para exibir o conteúdo da página. Por esse motivo esse é o único arquivo da hierarquia de templates que é obrigatório no seu tema. Caso ele não exista, você não tem um tema WordPress.
Também falaremos mais detalhadamente do arquivo index.php em um artigo futuro, relaxa.
Hierarquia de templates com links permanentes habilitados
Aí você começa a se perguntar. E quando meu WordPress não possui URL com parâmetros, pois estou com os links permanentes habilitados? O que vai mudar?
Nada jovem. A hierarquia de templates do WordPress é sempre a mesma em qualquer situação. O que passa a ocorrer é uma transformação da URL personalizada na URL padrão equivalente. Por exemplo, caso seja requisitada a URL http://seuwp.com/category/noticias ela será internamente traduzida como http://seuwp.com?cat=2.
E como o WordPress faz isso?
Quando habilitamos os links permanentes o WordPress salva no banco, o que chamamos de regras de reescrita de URL (rewrite rules), que são consultadas a cada página requisitada no nosso site. São essas regras que o WordPress utiliza para transformar uma URL amigável em algo que ele possa interpretar e seguir o fluxo da hierarquia de templates já descrito nesse artigo.
Abaixo um pequeno trecho das regras de reescrita de URL desse blog:
Array
(
[category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2]
[category/(.+?)/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2]
[category/(.+?)/page/?([0-9]{1,})/?$] => index.php?category_name=$matches[1]&paged=$matches[2]
[category/(.+?)/?$] => index.php?category_name=$matches[1]
[tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2]
[tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2]
[tag/([^/]+)/page/?([0-9]{1,})/?$] => index.php?tag=$matches[1]&paged=$matches[2]
[tag/([^/]+)/?$] => index.php?tag=$matches[1]
[author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$matches[1]&feed=$matches[2]
[author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?author_name=$matches[1]&feed=$matches[2]
[author/([^/]+)/page/?([0-9]{1,})/?$] => index.php?author_name=$matches[1]&paged=$matches[2]
[author/([^/]+)/?$] => index.php?author_name=$matches[1]
)
Fechou!
Essa é nossa introdução à Hierarquia de templates do WordPress, espero ter elucidado um pouco melhor para todos a respeito do funcionamento “underground” do WordPress, quanto ao controle por parâmetros de URL e a inclusão de arquivos da hierarquia.
Fiquem ligados no nosso blog pois esse assunto é muito extenso, não termina por aqui. Em breve outros artigos elucidarão ainda mais sobre a hierarquia de templates do WordPress, falando especificamente sobre cada um dos arquivos que você pode ter em seu tema.