WordPress - Separando as responsabilidades
Vamos começar a organizar melhor nosso tema, separando as responsabilidades. Tiraremos toda a lógica da view, e trataremos em controllers separados. Vamos ver como isso fica na prática? ;)
Pra começar, acompanhe o tema que estamos desenvolvendo juntos: https://github.com/fdaciuk/wordpress-base-theme-da2k.com.br
A grande vantagem de trabalhar com o WordPress, é que ele não nos prende a uma estrutura específica. Precisamos seguir algumas convenções, mas podemos facilmente organizar nossos arquivos e separar como cada coisa é feita de forma bem fácil.
Esse formato que vou mostrar hoje, é como eu uso nos meus projetos. É importante que fique claro que, existem várias formas de fazer o que veremos hoje. Essa não é a forma “absolutamente certa”, mas é como resolve os problemas pra mim.
Chega de lenga-lenga, vamos ao que interessa: código!
Single
No último post, vimos que, no WordPress, temos alguns Tipos de Conteúdo padrão, mas que também podemos criar os nossos próprios. Hoje veremos o template single.php
.
Então, antes de qualquer coisa, crie esse arquivo na raiz do seu tema. Nossa estrutura agora deve estar assim:
1 | . |
Fazendo isso, vamos começar a brincadeira! O single.php
serve para mostrar uma postagem específica.
Quando você acessa a URL de um post, por exemplo, o WordPress procura usa esse template para renderizar o post.
Mas o single.php
vai muito além disso: segundo a hierarquia de templates do WordPress, quando você acessa a URL de uma postagem (seja do Post Type “post” ou qualquer outro criado por você), a busca pelo template é feita na seguinte ordem:
Primeiro o WordPress procura na raiz da sua aplicação, um arquivo chamado single-{post-type}.php
, onde `{post-type} é o nome do seu Post Type.
Exemplo: imagine que você tem um Post Type chamado filmes, e você quer acessar a URL que leva para o filme The Avengers. Ao acessar a URL http://seusite.com.br/filmes/the-avengers/
, o WordPress irá verificar se no seu tema você tem um arquivo chamado single-filmes.php
.
Se esse arquivo não existir, o WordPress vai procurar o arquivo single.php
(que é o que estamos vendo agora). Se encontrar, é nese arquivo que a postagem será renderizada. Senão, a renderização é feita na index.php
.
Perceba que a index.php
é o fallback para todos os templates, por isso é importante mantê-la no seu projeto, ainda que você quase não a use, ou use pouco. Fazendo a cópia da index.php
na single.php
, nossa single
deve estar com essa estrutura:
Mantivemos essa estrutura, pois precisamos apenas mostrar um post. Não é necessário o loop aqui, somente as template tags.
Interface
Para separar as responsabilidades, não podemos deixar lógica alguma na nossa view. Os templates que o WordPress disponibiliza não deveriam ter nenhuma lógica ou regra de negócio. Isso precisa ficar em arquivos à parte.
No nosso caso, vamos utilizar controllers para nos ajudar a organizar as coisas. Crie no diretório functions/
, um outro diretório chamado controllers
. E dentro desse diretório, crie um arquivo chamado controller-single.php
. A nossa estrutura agora deveria estar assim:
1 | . |
Cada controller conterá uma classe PHP, que irá responder por uma página específica, ou por URL. No nosso caso, estamos criando primeiramente um controller que vai gerenciar nossa single.php
.
Vamos agora fazer algumas mudanças na single.php
. Primeiro de tudo, vamos criar nossa interface. Nosso single
deve ficar assim:
1 | <?php |
O que é significa “ter uma interface” o por que precisamos de uma?
A interface são os métodos e propriedades públicas da classe que vai controlar o conteúdo mostrado na nossa single
. Primeiramente nós colocamos na nossa view, o que nós esperamos que seja retornado.
Podemos ver nesse exemplo que:
- a variável
$single_post
recebe um objeto; - esperamos que sejam retornadas 3 informações:
thumbnail
,title
econtent
, como propriedades do objeto$single_post
.
Mas de onde vêm esses dados?
Do controller! É ele que vai cuidar de toda a lógica para que nossa view se mantenha assim, limpa! A view deve somente “cuspir” as informações. Nada de zona na view! Nada de lógica de PHP e estruturas gigantes! Vamos separar as responsabilidades para que nosso código fique legível e fácil de editar!
No próximo post, vamos ver como ficará nosso controller, e como ele irá tratar as informações para devolver à view!
Ficou com alguma dúvida? Comente!
Até a próxima! :D
Link para o índice dessa série:
https://blog.da2k.com.br/2015/01/11/indice-da-serie-como-criar-temas-para-wordpress/Post anterior:
https://blog.da2k.com.br/2015/02/03/wordpress-tipos-de-conteudo/Próximo post:
https://blog.da2k.com.br/2015/02/11/wordpress-controlando-a-exibicao-dos-dados/
Sobre o #1postperday: https://blog.da2k.com.br/2014/12/31/um-post-por-dia/
Tem alguma sugestão para os próximos posts do #1postperday? Deixe ela aqui: https://github.com/fdaciuk/fdaciuk.github.io/issues/1