WordPress: o arquivo functions.php

WordPress - O arquivo functions.php

O functions.php é o canal que liga o seu tema a todas as coisas legais que o WP tem a oferecer! Códigos personalizados, estrutura de arquivos… todo tipo de manipulação que você imagina no seu site WordPress, você faz através do functions.php. Vamos conhecê-lo? ;)

O functions.php é um arquivo que fica na raiz do seu tema WordPress, e ele é carregado antes de qualquer arquivo de template do tema.

Sem perder tempo, vamos então criá-lo!

Segurança

Uma pequena pausa para tratar de uma melhoria para segurança: no post anterior, comentei sobre como previnir acesso direto a um arquivo do seu tema, lembra? Pois o Pedro Diaz fez um comentário muito relevante:

Uma dúvida: eu poderia colocar este código em um arquivo .php e somente dar um include nos outros arquivos?

E a resposta é: SIM, é possível!

Para manter a organização do nosso tema, vamos adicionar nossos códigos personalizados em um diretório chamado functions, e criar um arquivo chamado security.php. A estrutura de arquivos do nosso tema deve estar assim:

1
2
3
4
5
6
7
8
9
.
├── .editorconfig
├── footer.php
├── functions
│   └── security.php
├── functions.php
├── header.php
├── index.php
└── style.css

Criamos o arquivo functions.php e o arquivo security.php. Então transferimos nosso código que faz o redirect para esse arquivo security.php:

1
2
3
4
5
<?php
if( ! defined( 'ABSPATH' ) ) {
header( 'Location: /00-opensource/wordpress/' );
exit;
}

Ei, você esqueceu de fechar o <?php?

Não! Essa é uma boa prática no desenvolvimento com PHP. Sempre que você tiver um arquivo que só irá conter código PHP, você não precisa (e não deve) fechar com a tag ?>, pois, se esse arquivo tiver a tag de fechamento e você esquecer um espaço ou quebra de linha após essa tag; e ele for carregado antes de qualquer outro arquivo que faça alguma modificação de headers, você terá um erro como esse:

1
Erro PHP: Cannot modify header information – headers already sent

Agora você precisa somente fazer o include do arquivo security.php nos seus arquivos, ao invés de adicionar o if todo :)

1
<?php require_once 'functions/security.php' ?>

Só não esqueça que, se você estiver dentro de diretórios, vai precisar passar o caminho relativo ao arquivo. Mas use isso como você achar melhor, ok? ;)

Suporte para funcionalidades

O WordPress tem várias funcionalidades legais, mas que não vêm ativadas por padrão, pois consumiriam muitos recursos se estivessem ativadas e você não precisasse delas. Então, você ativa essas funcionalidades conforme a sua necessidade.

Se você olhar no Painel, por exemplo, na tela de edição de post, você terá as seguintes opções:

Single post

Vamos adicionar a funcionalidade de Post Thumbnails, para que possamos adicionar uma imagem ao nosso post. No seu functions.php:

1
2
3
4
5
6
7
&lt;?php
require_once 'functions/security.php';

add_action( 'after_setup_theme', 'setup_features' );
function setup_features() {
add_theme_support( 'post-thumbnails' );
}

E temos como resultado:

Imagem destacada

Agora temos essa nova funcionalidade disponível para todos os nossos tipos de conteúdo!

E como eu uso isso?

Na sua index.php, adicione o código:

1
2
3
4
5
6
7
&lt;?php if( have_posts() ) : while( have_posts() ) : the_post() ?&gt;
&lt;?php
if( has_post_thumbnail() ) {
the_post_thumbnail();
}
?&gt;
// ...

Adicionei o loop novamente (linha 1) só para que você possa se encontrar para saber onde deve adicionar o código.

Uma outra boa prática que preciso comentar aqui: percebeu que eu abri novamente uma tag PHP, ainda que na linha de cima eu já tinha uma linha só com código PHP? Por que eu não utilizei o mesmo escopo, deixando o código como abaixo?

1
2
3
4
5
6
&lt;?php if( have_posts() ) : while( have_posts() ) : the_post();
if( has_post_thumbnail() ) {
the_post_thumbnail();
}
?&gt;
// ...

Bom, por essa implementação, você já pode perceber que o alinhamento das indentações não bate. Procure sempre manter as indentações bem definidas. Sempre que você precisar fazer uma validação PHP usando if por exemplo, e vai precisar imprimir código HTML dentro desse if, use a notação com :, dessa forma, e abra um novo escopo de tags:

1
2
3
&lt;?php if( verifique_alguma_coisa() ) : ?&gt;
<h1>Título</h1>
&lt;?php endif ?&gt;

Dessa forma o código fica muito mais limpo e consistente, pois você sabe onde o if termina, por causa do endif. Se usar com chaves, já fica ruim de visualizar:

1
2
3
&lt;?php if( verifique_alguma_coisa() ) { ?&gt;
<h1>Título</h1>
&lt;?php } ?&gt;

Da mesma forma, quando precisamos adicionar um código PHP indentado, mas precisamos fechar o PHP para adicionar HTML. Quando indentar, abrar um novo escopo de tags <?php ?>, para que seu código se mantenha o mais legível possível.

Fica a dica!

Agora temos duas novas funções: has_post_thumbnail() e the_post_thumbnail(). Os nomes são bem semânticos, não?

has_post_thumbnail() retorna true se o post tem uma imagem destacada, e false se não houver. E the_post_thumbnail(), gera uma tag de imagem, com a imagem destacada que você adicionar no seu post. Se não houver imagem, continua a exibição normal do post :)

Para ver o código completo até aqui, siga esse repositório: https://github.com/fdaciuk/wordpress-base-theme-da2k.com.br

Lembra que comentamos sobre hooks? No código mais acima, podemos ver o hook after_setup_theme em ação.

Como ele funciona?

Os desenvolvedores do WordPress “largam” algumas chamadas aos hooks (ganchos) no meio do core do WP, para que você possa “pendurar” os seus próprios códigos. Nesse caso, dizemos ao WordPress que, quando chegar no local do código onde está posicionado o hook after_setup_theme, ele deve executar a função setup_features, passada no segundo parâmetro.

O WordPress tem vários hooks no core, que podem ser encontrados aqui: http://codex.wordpress.org/Plugin_API/Hooks

Mas não se preocupe com isso agora. Veremos isso mais a fundo nos próximos posts, inclusive aprenderemos como criar nossos próprios hooks :D

Bom, paramos por aqui, mas saiba que estamos apenas começando! Temos muitas coisas legais ainda pra ver! Continue acompanhando a série!

Até o próximo post :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/01/12/wordpress-estrutura-inicial-do-tema-padroes-de-codificacao-e-uso-do-editor/

Próximo post:
https://blog.da2k.com.br/2015/01/20/wordpress-conhecendo-o-painel-parte-1/

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