2. Thiago Mendes
Analista desenvolvedor web, nerd, pai e
curioso. Trabalho com PHP desde 2004,
criando sites, sistemas entusiasta de Laravel e
há 6 anos focado em WordPress.
@thiagotmendes
Linkedin
GitHub
3. Não use query_posts()
Está função sobre-escreve a query principal do site. O
mais indicado é utilizar WP_Query ou get_posts por
serem mais performáticos.
“Cada vez que você utiliza query_posts() uma fada
morre”
Leo Baiano
Fonte:
https://developer.wordpress.org/reference/functions/query_posts
/
4. Agora podemos começar!
O WordPress enquanto sistema, sempre promoveu como política a simplicidade de criação e a
manutenção/compatibilidade das versões antigas.
Este fator contribui para que possam existir projetos que não sigam padrões, principalmente
quando relacionado a arquitetura. Isto também fez com que o WordPress fosse mal visto fora de
sua comunidade por programadores (principalmente quando relacionado às PSRs).
Mas é possível desenvolver grandes projetos em WordPress? o CMS alcançou seu ápice e não
tem mais como crescer?
5. Estrutura do template
Para criar o template são obrigatórios:
style.css -> Obrigatório, deve conter toda informação referente ao template, sua documentação,
tais como: autor do tema, descrição etc.
index.php-> Arquivo principal do template.
Apesar de opcionais são necessários e indicados:
functions.php -> arquivo responsável pela criação e alteração de funções do sistema.
screenshot.png -> Imagem que vai aparecer na guia de temas disponíveis no repositório de seu
sistema.
6.
7. Quebre o template em partes
É bem comum que ao escrever códigos, acabemos por gerar um amontoado de funções, html, css e que
isso gere uma enorme quantidade de linhas de código, a melhor forma de se dar manutenção é quebrar
este código em pequenos pedaços.
O WordPress conta com um método eficaz para realizar a inclusão de códigos html em qualquer parte
do template, facilitando também o reaproveitamento do bloco em outros lugares.
get_template_part($slug , $nome): carrega (insere) um bloco de código dentro do template.
Além disso cria um mecanismo simples de sobre-escrever partes em templates filho, bastando apenas
criar um arquivo com mesmo nome representando o mesmo caminho.
Ex:
tema pai > template-parts > exemplo.php
tema filho > template-parts > exemplo.php = irá sobrescrever a versão acima
Obs: para passar valores por template partes utilize include(locate_template('template-part.php'));
8. Estrutura de pastas
O ideal é cada um utilizar a estrutura que
melhor se adapte, particularmente prefiro
separar os nomes de pasta e arquivos com
base em sua função dentro do template,
desde que dentro de um consenso, e que
principalmente em comum acordo com a
equipe.
9. Criando loops
Como dito no início, não devemos nunca alterar a query principal do WordPress, ele conta com
métodos que funcionam melhores para este tipo de ocasião:
get_posts(): retorna um array com os últimos posts ou de acordo com os critérios passados, é a
melhor opção quando se tem vários loops simples em um mesmo local, este método utiliza
wp_query() para recuperar os itens do post, sendo assim é bem similar em seu funcionamento
com poucas diferenças.
Obs: utilize wp_reset_postdata(); para limpar a query, assim não prejudica a performance do site.
10.
11. WP_Query
É a principal query class do WordPress, consegue carregar
uma série de métodos padronizados como have_posts() e
the_post(). A principal diferença para o get_posts() é a
quantidade de atributos possíveis. É o mais indicado quando é
necessário realizar consultas complexas.
Obs: utilize wp_reset_postdata(); para limpar a query, assim não
prejudica a performance do site.
12. Abuse da arquitetura
WordPress conta com uma grande quantidade de “facilitadores” na criação de templates, a
possibilidade de criar um template personalizado para uma página é um enorme diferencial,
graças a esta função por exemplo que existem os page builders, criando apenas um arquivo
page-minhapagina.php é possível atribuir um layout totalmente específico para aquele caso.
É possível também criar um template modelo que possa ser aplicado diretamente pelo painel.
A sugestão é: criar modelos quando forem ser aplicadas em várias páginas, de forma que o
mesmo template possa ser amplamente utilizado.
Para criar um modelo basta inserir “template name: nome” através de um comentário
13. Aprenda HTML e CSS
HTML é a base de toda a estrutura de código carregado pelo navegador, mesmo assim é
extremamente subestimado por vários membros da comunidade de desenvolvimento, muitos
deixam para aprender determinados atributos apenas quando necessário, quando na realidade
existem uma série de atributos que podem facilitar sua vida.
Padronização de código não é apenas em seu servidor mas também no front-end que é
carregado, por isso metodologias e linguagens front-end evoluíram tanto nos últimos anos como
no caso do javaScript (ECMAScript) e até no css/sass.
Obs: BEM (block element modifier) é uma boa metodologia para o desenvolvimento do CSS.
http://getbem.com/introduction/
https://www.w3schools.com/html/html5_semantic_elements.asp
14. Task runners
São automatizadores de tarefas que tem a capacidade
de executar funções complexas para agilizar o
processo de desenvolvimento criando um workflow
de projetos seja na construção até o deploy.
Os mais conhecidos são grunt, gulp e webpack, sendo
mais comum ao WordPress atualmente o gulp. Com
eles é possível por exemplo entregar um código
javaScript e CSS totalmente minificado e testado,
otimizar imagens e até mesmo criar font-icons.
Estes task runes são geralmente compilados através
do node através de javaScript
Gulp: https://gulpjs.com/ Webpack:https://webpack.js.org/
15. Separe a regra de negócio do template
É bem comum atrelarmos toda a regra de negócio no momento da criação do template,
adicionar Custom Post Types, dentre outras características ao template, sem antes pensar melhor
sobre separação de camadas, obviamente não existe um consenso sobre isso quando
relacionado ao WordPress.
A sugestão neste caso é avaliar bem qual a função do atributo que será criado, se ele é inerente
ao template, ou a regra do negócio, um bom exemplo é o próprio WooCommerce, que é uma regra
de negócio, e o template gira em torno dele.
Para fazer esta separação o indicado é criar plugins, assim deixando para o template a
responsabilidade de ficar apenas com a renderização do layout e atributos que estejam ligados
diretamente a ele.
16. Para criar um plugin
Basta dentro da pasta plugins criar um arquivo com o seguinte trecho em formato de
comentário:
Obs: utilize apenas os plugins que forem
necessário, não apenas por performance mas
também por segurança, é muito comum
encontrar sites WordPress com dezenas de
plugins instalados, esta é uma prática ruim,
pode afetar diretamente os resultados do seu
site.
17. Hooks
São formas de alterar comportamentos de determinadas classes ou funções sem alterar o seu
core.
Filters
Altera um valor de variável
Possui retorno
the_title
the_content
wp_insert_post_data
Actions
Faz alguma coisa / Gatilho
Não tem retorno
init
plugins_loaded
wp_enqueue_scripts
delete_user
add_user
save_post
18. Segurança
WordPress é atualmente o CMS mais utilizado na Web, alguns números chegam a falar em 63%
do mercado de CMS (segundo a W3 Techs), e 35% da web, o fato de tentar sempre manter a
compatibilidade com versões antigas, junto com sua enorme comunidade faz com que sua
arquitetura seja amplamente conhecida e por isso alvo de ataques.
O sistema conta com bons plugins de segurança tal com o WorDfence (site, plugin), ainda assim
existem métodos de ajudar em sua segurança tais como:
1. Configurar o Robots.txt para não traquear certas partes do site
2. Desabilitar o acesso ao xmlrpc.php por ser amplo alvo de ataques
3. Ter atenção nas permissões de pasta (diga não ao 777)
4. Evite instalar plugins desconhecidos, desatualizados ou sem compatibilidade com atual
versão do sistema
5. Mantenha sempre atualizado core e plugins
19. Robots.txt:
User-agent: *
Disallow: /feed/
Disallow: /trackback/
Disallow: /wp-admin/
Disallow: /wp-content/
Disallow: /wp-includes/
Disallow: /xmlrpc.php
Disallow: /wp-
.htaccess (bloquear xmlrpc.php)
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
Utilize 755 para pastas 644 para arquivos
find /path/to/wp-folder/ type f ! perm 644 exec chmod 644 {}
;
find /path/to/wp-folder/ type d ! perm 755 exec chmod 755 {}
;
20. Alguns cases
Faculdade Ietec: https://www.ietec.com.br/
Valenet: http://valenet.com.br/splash/
Relatório de gestão Unimed: https://relatoriodegestao.unimedbh.io/desktop/
FSFX - Fundação São Francisco Xavier: http://fsfx.com.br/homologacao/