A Importância de Configurações Mínimas no WordPress

Quando se trata de desenvolvimento WordPress personalizado, estruturas de temas como Sage e Genesis tornaram-se uma solução ideal, principalmente para muitas agências que confiam em estruturas como um ponto de partida eficiente para projetos de clientes. Elas prometem padrões modernos, fluxos de trabalho simplificados e bases de código sustentáveis. À primeira vista, essas estruturas parecem ser a resposta para a criação de sites WordPress personalizados de alta qualidade. No entanto, os anos em que herdei essas construções como desenvolvedor freelancer contam uma história diferente — uma história enraizada na realidade da manutenção de longo prazo, escalabilidade e integração de desenvolvedores.

Como especialista em trabalhar com sites profissionais, frequentemente recebo projetos originalmente construídos por agências que usam essas estruturas. Essa experiência me proporcionou uma perspectiva única sobre as implicações reais dessas ferramentas ao longo do tempo. Embora possam parecer ótimas em uma apresentação inicial, suas complexidades geralmente criam atritos para futuros desenvolvedores, equipes de manutenção e até mesmo para as empresas que atendem.

Não que estruturas como Sage ou Genesis não tenham mérito, mas estão longe de serem a “melhor prática” universal que costumam ser anunciadas. Abaixo, compartilharei as lições que aprendi ao herdar e trabalhar com essas configurações, os desafios que enfrentei e por que acredito que uma abordagem WordPress minimalista geralmente oferece um caminho melhor.

## Por que agências usam frameworks

Os frameworks são projetados para tornar o desenvolvimento WordPress mais rápido, limpo e otimizado para as melhores práticas atuais. As agências são atraídas por essas ferramentas por vários motivos:

* **Padrões de código atuais:** Frameworks como Sage adotam padrões PSR-2, gerenciamento de dependência baseado em composer e abstrações semelhantes a MVC.

* **Componentes reutilizáveis:** O modelo Blade do Sage incentiva a modularidade, enquanto o Genesis depende de hooks para extensa personalização.

* **Ferramentas de design otimizadas:** A integração com Tailwind CSS, SCSS e Webpack (ou ferramentas mais recentes como Bud) permite prototipagem rápida.

* **Desempenho otimizado:** Os frameworks são normalmente projetados com temas leves e sem inchaço em mente.

* **Produtividade da equipe:** Ao criar uma abordagem padronizada, essas estruturas prometem eficiência para equipes maiores com vários colaboradores.

No papel, esses benefícios tornam os frameworks uma escolha atraente para as agências. Eles simplificam o processo de construção inicial e atendem aos desenvolvedores acostumados a trabalhar com práticas modernas de PHP e ferramentas orientadas a JavaScript. Mas sempre que herdo esses projetos anos depois, as rachaduras na fundação começam a aparecer.

## A realidade de manter construções baseadas em frameworks

Embora os frameworks tenham seus pontos fortes, minha experiência em primeira mão revela problemas recorrentes que surgem quando é hora de manter ou estender essas construções. Esses desafios não são teóricos — são problemas que encontrei repetidamente ao entrar em um site existente baseado em framework.

### Abstração cria atrito

Um dos pontos de venda dos frameworks é o uso de abstrações, como o modelo Blade e a separação controlador para visualização. Embora esses padrões façam sentido na teoria, eles geralmente levam a **complexidade desnecessária** na prática.

Por exemplo, os modelos Blade abstraem a lógica PHP da hierarquia de temas tradicional do WordPress. Isso significa que erros como problemas de sintaxe não fornecem rastreamentos de pilha claros apontando para o arquivo de visualização real — em vez disso, eles referenciam modelos compilados. **A depuração se torna uma caça ao tesouro**, especialmente para desenvolvedores não familiarizados com a estrutura do Sage.

Pegue o puck.news, um popular veículo de notícias com milhões de visitantes mensais. Quando herdei seu tema baseado em Sage, tive que ignorar seu ambiente Lando/Docker para usar minha própria configuração mínima de localhost Nginx. O tema era incompatível com os fluxos de trabalho padrão do WordPress e tive que modificar os scripts de construção para suportar uma instalação tradicional. Depois de resolver os problemas de ambiente, percebi que o processo de construção era incrivelmente lento, com a substituição de módulo quente apenas parcialmente funcional (as alterações no modelo Blade não recarregavam). Cada salvamento levava de 4 a 5 segundos para compilar.

Diante da decisão de atualizar para o Sage 10 ou reconstruir os aspectos críticos, optei pelo último. Melhoramos drasticamente o desempenho substituindo a construção do Sage por um simples processo Laravel Mix. O novo processo de construção foi reduzido de milhares de linhas para 80, melhorando significativamente o fluxo de trabalho do desenvolvedor. Qualquer novo desenvolvedor agora poderia entender a configuração rapidamente e a depuração futura seria muito mais simples.

### Padrões inflexíveis

Embora o Sage incentive as “melhores práticas”, esses padrões podem parecer rígidos e superprojetados para tarefas simples. Personalizar recursos básicos do WordPress — como adicionar um menu de navegação ou ajustar uma consulta de postagem — requer seguir os padrões prescritos da estrutura. Isso **introduz uma curva de aprendizado** para desenvolvedores que não estão profundamente familiarizados com o Sage e **retarda o progresso para pequenos ajustes**.

As estruturas de temas tradicionais do WordPress, por outro lado, são intuitivas e amplamente compreendidas. Qualquer desenvolvedor WordPress, independentemente da experiência, pode entrar em um tema clássico e imediatamente saber onde procurar modelos, lógica e personalizações. As camadas de abstração do Sage, embora bem-intencionadas, limitam a acessibilidade a um grupo menor e mais específico de desenvolvedores.

### Problemas de compatibilidade de hospedagem

Ao trabalhar com o Sage, problemas com ambientes de hospedagem são inevitáveis. Por exemplo, o uso de Laravel Blade pelo Sage compila modelos em arquivos PHP em cache, geralmente armazenados em diretórios como /wp-content/cache. Regras rígidas do sistema de arquivos em plataformas de hospedagem gerenciada, como WP Engine, podem bloquear essas gravações, levando a **telas brancas** ou **modelos quebrados após a implantação**.

Este foi precisamente o problema que enfrentei com paperlessparts.com, que estava executando um tema Sage no WP Engine. Cada implantação do Git resultava em uma tela branca da morte devido a erros de PHP causados por modelos Blade que não conseguiam salvar no diretório de cache pretendido. A solução, recomendada pelo suporte do WP Engine, foi usar o diretório /tmp do sistema. Embora essa solução alternativa evitasse erros de implantação, ela minava o propósito de modelos em cache, pois os arquivos temporários são limpos pela coleta de lixo do PHP. Depurar e implementar essa solução consumiu um tempo significativo — tempo que poderia ter sido evitado se o tema tivesse sido projetado com compatibilidade de hospedagem em mente.

### Mudanças interruptivas e problemas de atualização

A atualização do Sage 9 para o Sage 10 — ou mesmo de versões mais antigas do Roots — geralmente parece uma reconstrução completa. Essas mudanças interruptivas criam atrito para empresas que desejam estabilidade de longo prazo. Os clientes, compreensivelmente, não estão dispostos a pagar pelo que equivale a refatoração sem um retorno visível sobre o investimento. Como resultado, esses sites estagnam, presos a versões desatualizadas da estrutura, criando **problemas com o gerenciamento de dependência** (por exemplo, pacotes Composer, versões Node.js) e **incompatibilidades de documentação**.

Um subcontrato de agência em que trabalhei recentemente me deu uma visão da abordagem mais recente do Sage 10. Mesmo em pequenos microsites com lógica personalizada mínima, achei o sistema de construção baseado em Bud lento, com processos de observação levando mais de três segundos para recarregar.

Para desenvolvedores acostumados a fluxos de trabalho mais rápidos, isso é inaceitável. Além disso, o Sage 10 introduziu novos padrões e diretivas que se afastaram significativamente do Sage 9, adicionando uma nova curva de aprendizado. Embora eu entenda o apelo de espelhar a estrutura do Laravel, não consegui afastar a sensação de que essa complexidade era desnecessária para o WordPress. Ao manter abordagens mais simples, a pegada poderia ser menor, o desempenho mais rápido e a manutenção muito mais fácil.

## O custo da superengenharia

Os problemas acima se resumem a um tema central: **superengenharia**.

Estruturas como o Sage introduzem complexidade que, embora benéfica na teoria, muitas vezes supera os benefícios práticos para a maioria dos projetos WordPress.

Quando você considera restrições do mundo real — como orçamentos apertados, rotatividade frequente de desenvolvedores e a necessidade de bases de código intuitivas — **o caso para uma abordagem WordPress minimalista** se torna claro.

Configurações WordPress minimalistas abraçam a simplicidade:

* **Sem abstração por abstração:** A hierarquia de temas tradicional do WordPress é direta, previsível e acessível a um amplo público de desenvolvedores.

* **Sobrecarga de ferramentas reduzida:** Evitar a dependência de ferramentas como Webpack ou Blade remove potenciais pontos de falha e acelera os fluxos de trabalho.

* **À prova do futuro:** Uma estrutura de tema padrão permanece compatível com as atualizações do núcleo do WordPress e as expectativas do desenvolvedor, mesmo uma década depois.

Na minha experiência, as configurações mínimas promovem uma colaboração mais fácil e uma resolução de problemas mais rápida. Elas se concentram em resolver o problema em vez de aderir a padrões excessivamente opinativos.

## Exemplo do mundo real

Como muitas coisas, tudo isso soa ótimo e faz sentido na *teoria*, mas como é na prática? Ver para crer, então criei um tema mínimo que exemplifica alguns dos conceitos que descrevi aqui. Este tema é um trabalho em andamento e há muitas áreas onde precisa de trabalho. Ele fornece os principais recursos que os desenvolvedores WordPress personalizados parecem mais desejar em uma estrutura de tema.

* Ver código no GitHub

### Recursos modernos

Antes de mergulharmos, listarei alguns dos principais benefícios do que está acontecendo neste tema. Acima de tudo isso, **trabalhar minimamente** e **manter as coisas simples e fáceis de entender** é, de longe, o maior benefício, na minha opinião.

* Uma tarefa de observação que compila e recarrega em menos de 100ms;
* Sass para pré-processamento de CSS juntamente com CSS escrito em sintaxe BEM;
* Módulos ES nativos;
* Gerenciamento de pacotes Composer;
* Modelo de visualização Twig;
* Padrão de controlador de visualização;
* PHP com namespace para isolamento;
* Suporte integrado para o plugin Advanced Custom Fields;
* Variáveis de contexto globais para dados comuns do WordPress: site_url, site_description, site_url, theme_dir, theme_url, primary_nav, campos personalizados ACF, the_title(), the_content().

### Linguagem de templating

O Twig está incluído neste tema e é usado para carregar um pequeno conjunto de variáveis de contexto globais comumente usadas, como URL do tema, diretório do tema, nome do site, URL do site e assim por diante. Ele também inclui algumas funções principais também, como the_content(), the_title() e outras que você rotineiramente usa durante o processo de criação de um tema personalizado. Essas variáveis e funções de contexto global estão disponíveis para todas as URLs.

Embora possa ser argumentado que o Twig é uma camada de abstração adicional desnecessária quando estamos tentando estabelecer uma configuração WordPress minimalista, optei por incluí-lo porque esse tipo de abstração está incluído no Sage. Mas também por alguns outros motivos importantes:

* Antigo,
* Confiável e
* Estável.

Você não precisará se preocupar com quaisquer futuras mudanças interruptivas em versões futuras e está amplamente em uso hoje. Todos os recursos que costumo ver usados nos modelos Sage Blade podem ser facilmente tratados com o Twig de forma semelhante. Realmente não há nada que você possa fazer com o Blade que não seja possível com o Twig.

O Blade é uma ótima linguagem de templating, mas é mais adequada para o Laravel, na minha opinião. O BladeOne oferece uma boa maneira de usá-lo como um mecanismo de templating independente, mas mesmo assim, ainda não é tão performático sob pressão quanto o Twig. O desempenho adicional do Twig, quando usado com contextos pequenos e eficientes, nos permite evitar a complexidade que vem com o caching da saída da visualização. O Twig compilado em tempo real é muito próximo da mesma velocidade do PHP bruto neste caso de uso.

Mais importante, **o Twig foi construído para ser portátil**. Ele pode ser instalado com composer e usado dentro do tema com apenas 55 linhas de código.

Agora, em um projeto real, isso provavelmente seria mais do que 55 linhas, mas de qualquer forma, é, sem dúvida, muito mais fácil de entender e trabalhar do que o Blade. O Blade foi construído para uso no Laravel e não é tão portátil. Será significativamente mais fácil identificar problemas, rastreá-los com um rastreamento de pilha direto e corrigi-los com o Twig.

O contexto de visualização neste tema é deliberadamente mantido esparso, durante a construção de um site, você adicionará o que precisa especificamente para um determinado site. Um contexto enxuto para suas visualizações ajuda no desempenho e no fluxo de trabalho.

### Modelos e controladores

A hierarquia de modelos segue os padrões do bom e velho WordPress e, embora alguns desenvolvedores não gostem disso, é, sem dúvida, o padrão mais amplamente aceito e comumente compreendido. Cada arquivo de tema padrão usa um modelo onde você define suas estruturas de dados com PHP e entrega o tema como o contexto para um arquivo de visualização .twig.

Os desenvolvedores gostam da estrutura de separar a lógica do lado do servidor de um modelo e, em um padrão MVC/MVVC clássico, temos nosso modelo, visualização e controlador. Aqui, estou usando os modelos de tema padrão do WordPress como modelos.

Atualmente, os arquivos de modelo incluem alguns conceitos básicos úteis. Você provavelmente está familiarizado com esses modelos padrão, mas os listarei aqui para posteridade:

* **404.php:** Exibe uma mensagem personalizada de “Página não encontrada” quando um visitante tenta acessar uma página que não existe.
* **archive.php:** Exibe uma lista de posts de um determinado arquivo, como uma categoria, data ou arquivo de tag.
* **author.php:** Exibe uma lista de posts de um autor específico, juntamente com as informações do autor.
* **category.php:** Exibe uma lista de posts de uma categoria específica.
* **footer.php:** Contém a seção de rodapé do tema, normalmente incluindo o fechamento de tags HTML e widgets ou navegação na área do rodapé.
* **front-page.php:** O modelo usado para a página inicial do site, estática ou um blog, dependendo das configurações do site.
* **functions.php:** Adiciona funcionalidade personalizada ao tema, como registrar menus e widgets ou adicionar suporte ao tema para recursos como logos personalizados ou miniaturas de postagem.
* **header.php:** Contém a seção de cabeçalho do tema, normalmente incluindo o título do site, meta tags e menu de navegação.
* **index.php:** O modelo de fallback para todas as páginas WordPress é usado se nenhum outro modelo mais específico (como category.php ou single.php) estiver disponível.
* **page.php:** Exibe páginas estáticas individuais, como páginas “Sobre” ou “Contato”.
* **screenshot.png:** Uma imagem do design do tema é mostrada no seletor de tema do WordPress para dar aos usuários uma prévia da aparência do tema.
* **search.php:** Exibe os resultados de uma consulta de pesquisa, mostrando posts ou páginas que correspondem aos termos de pesquisa inseridos pelo usuário.
* **single.php:** Exibe posts individuais, geralmente usados para posts de blog ou tipos de postagem personalizados.
* **tag.php:** Exibe uma lista de posts associados a uma tag específica.

### Processo de construção extremamente rápido para SCSS e JavaScript

A construção é curiosamente diferente neste tema, mas, imediatamente, você pode compilar SCSS para CSS, trabalhar com módulos JavaScript nativos e ter um processo de observação de recarregamento ao vivo com uma pegada minúscula. Olhe dentro dos arquivos bin/*.js e você verá tudo o que está acontecendo.

Existem apenas dois comandos aqui e todos os desenvolvedores da web devem estar familiarizados com eles:

1. **Observar:** Durante o desenvolvimento, ele irá recarregar ou injetar automaticamente as mudanças de JavaScript e CSS no navegador usando um Browsersync.
2. **Construir:** Esta tarefa compila todos os arquivos *.scss de nível superior de forma eficiente. Há espaço para melhorias, mas tenha em mente que este tema serve como um conceito.

Agora, para uma bola curva: não há **nenhum processo de compilação para JavaScript.** As mudanças de arquivo ainda serão injetadas no navegador com a substituição de módulo quente durante o modo de observação, mas não precisamos compilar nada.

O WordPress carregará o JavaScript do tema como módulos ES nativos, usando o suporte do WordPress 6.5 para módulos ES. Meu raciocínio é que muitos sites agora passam pelo Cloudflare, então a compressão moderna é tratada para JavaScript automaticamente. Muitos hosts WordPress especializados fazem isso também. Ao comparar a minificação com o GZIP, fica claro que a minificação fornece ganhos triviais na redução de arquivos. A grande maioria da redução de arquivos é fornecida por CDN e compressão do servidor. Com base nisso, acredito que os benefícios de um fluxo de trabalho rápido superam em muito a sobrecarga adicional de puxar as etapas de construção para webpack, Rollup ou outras ferramentas de empacotamento semelhantes.

Temos a sorte de que a web suporta totalmente os módulos ES hoje, então realmente não há razão para precisarmos compilar JavaScript se não estivermos usando uma estrutura JavaScript como Vue, React ou Svelte.

## Uma abordagem contrária

Minha perspectiva e as ideias que compartilhei aqui são, sem dúvida, contrárias. Como qualquer coisa alternativa, isso certamente irritará algumas pessoas. Estruturas como o Sage são celebradas em círculos de desenvolvedores, com comunidades fortes por trás delas. Para certos casos de uso — como projetos de grande escala, nível empresarial, com equipes de desenvolvimento dedicadas — elas podem, de fato, ser a escolha certa.

Para a grande maioria dos projetos WordPress que encontro, a complexidade adicionada cria mais problemas do que resolve. Como desenvolvedores, nosso objetivo deve ser construir soluções que não sejam apenas funcionais e performáticas, mas também sustentáveis e acessíveis para a próxima pessoa que as herdar.

A simplicidade, na minha opinião, é subestimada no desenvolvimento web moderno. Uma configuração WordPress minimalista, adaptada às necessidades específicas do projeto sem abstração desnecessária, é muitas vezes a escolha mais enxuta e sustentável. Se você está buscando saber mais sobre o mundo da tecnologia, fique por dentro das novidades com a Xiaomi, que oferece 6 anos de atualizações até para celulares Redmi econômicos.

Herdar projetos baseados em estruturas me ensinou lições valiosas sobre o impacto real das estruturas de temas. Embora possam impressionar em uma apresentação inicial ou durante o desenvolvimento, as consequências de longo prazo da complexidade adicionada muitas vezes superam os benefícios. Ao adotar uma abordagem WordPress minimalista, podemos construir sites que são **mais fáceis de manter**, **mais rápidos para integrar novos desenvolvedores** e **mais resilientes à mudança**.

Ferramentas modernas têm seu lugar, mas o minimalismo nunca sai de moda. Quando você escolhe a simplicidade, você escolhe uma base de código que funciona hoje, amanhã e anos depois. Não é disso que se trata o grande desenvolvimento web?

Primeira: Este conteúdo foi auxiliado por Inteligência Artificial, mas escrito e revisado por um humano.

Via Smashing Magazine

Leave a Comment

Exit mobile version