WordPress e Composer

 

O WordPress é um CMS amplamente utilizado em todo o mundo mas manter algumas boas práticas com ele é algo um pouco custoso, um exemplo disso é o versionamento. Normalmente os desenvovedores não separam o core do WordPress de sua regra de negócio, e isso é ruim pois induz o mesmo à versionar coisas desnecessárias e erroneamente realizar alterações hard-code no core do CMS e/ou plugins de terceiros. Hoje vou mostrar como resolver este problema.

Como bem sabemos, a proposta do composer é que você gerencie suas dependências através dele, versionando somente o que é o necessário, SUA aplicação.

Neste post vou mostrar como versionar somente a sua aplicação, sua regra de negócio utilizando Git, WordPress e Composer. Vamos lá?

 

Do que precisaremos

  • Uma instalação em branco do wordpress
  • Banco de dados Mysql obviamente
  • Sistema de versionamento Git
  • Gerenciador de dependências composer
  • Netbeans com o plugin do WordPress instalado e habilitado
  • Netbeans com o composer integrado (como já mostrei em outro post que pode ser visto aqui)

Supondo que tudo isso já esteja ok, vamos criar um projeto PHP dentro do Netbeans. Clique no botão para criar um projeto, na janela que se abre selecione a opção PHP e clique em “Next”.

Criando o projeto em PHP

 

 

Agora defina o nome de sua aplicação, local onde o mesmo será alocado, versão do PHP a ser utilizada e o encoding a ser utilizado. Em seguida clique em Next novamente.

Nomeando o projeto

A tela a seguir serve para que você configure as opções de execução do projeto, desta forma basta clicar em executar no Netbeans que o browser se abre no caminho indicado. Se preferir deixe tudo como vem por default.

Configura execução

 

Agora, na última tela que utilizaremos nesta instalação, é definida a utilização de framework/cms. Selecione WordPress, informe seus dados de conexão com o banco de dados e clique em “Finish”. Neste ponto é importante que o plugin do WordPress para o Netbeans esteja corretamente instalado e habilitado. Caso contrário baixe-o diretamente no repositório de plugins do Netbeans.

Frameworks CMSs e configurações

Pronto, dentro de instantes o wordpress já estará instalado e iniciaremos as configurações para gerenciarmos os plugins e temas.

 

O que precisamos “git”ignorar?

TUDO! E designorar algumas coisinhas. Crie seu arquivo .gitignore na raíz de seu projeto conforme o exemplo abaixo.

/*        # ignoramos TUDO do repositório
!/composer.json

# Realizando tratamento de ignores de temas e plugins
# ver: https://stackoverflow.com/questions/5533050/gitignore-exclude-folder-but-include-specific-subfolder 
# na resposta com título "gitignore.txt: clarify recursive nature of excluded directories"

# Designoramos o diretório wp-content
!/wp-content

# e ignoramos tudo (parece estranho, mas é assim que funciona)
/wp-content/*

# o mesmo faremos para os diretorios de plugins e temas, ignoramos
# o diretório como um todo e designoramos os plugins e temas que 
# estamos desenvolvendo somente

# Tratando ignores para os plugins desejados
!/wp-content/plugins
/wp-content/plugins/*
!/wp-content/plugins/seu-plugin-1
!/wp-content/plugins/seu-plugin-2

# Tratando os ignores para os temas desejados
!/wp-content/themes
/wp-content/themes/*
!/wp-content/themes/seu-tema

Agora já está tudo pronto para começarmos a desenvolver nossos plugins e temas. Obviamente que para a maioria dos casos precisaremos de alguns plugins de terceiros e é justamente neste ponto que o projeto WordPress Packagist se empenha, em tornar gerenciáveis nossas dependências de plugins e até de temas seguindo a mesma lógica do packagist, repositório oficial do composer.

Desta forma ainda temos mais um passo que é inicializar o composer em nosso projeto. No Netbeans clique com o direito do mouse no nome de seu projeto e na seção “Composer” clique em “Init”. O resultado deve ser como abaixo.

Inicializando Composer

Deve ser gerado um arquivo chamado composer.json que é onde informaremos os plugins que utilizaremos.

Composer inicializado

No arquivo composer.json precisamos informar qual é o repositório que utilizaremos. Isto se faz necessário porque se não definido um repositório, o composer tenta obter o pacote diretamente do packagist e desta forma não localizando os plugins e temas do wordpress. Antes da tag “require” adicione o seguinte conteúdo:

"repositories":[
        {
            "type":"composer",
            "url":"https://wpackagist.org"
        }
    ],

Em seguida vamos informar quais os plugins utilizaremos. Os plugins são todos que estiverem presentes no repositório svn do WordPress e que podem ser vistos aqui. Em seu arquivo composer.json adicione os plugins e temas desejados sempre indicando como vendor o projeto wpackagist seguido do tipo de projeto a obter (plugin ou theme) separados apenas por um hífen ( – ) adicionando uma barra (/) e em seguida o nome do pacote e a versão como já de costume do padrão do composer.

"require": {
    "wpackagist-plugin/captcha":">=3.9",
    "wpackagist-theme/hueman":"*"
}

 

Perfeito, agora basta instalar!

Instalando dependências

8-dependencias-instaladas

Se você chegou até aqui com os mesmos resultados que eu, muito bem tudo funcionou perfeitamente. Caso tenha encontrado algum erro no caminho faz o que todo bom desenvolvedor faz, analisa os erros, lê as sugestões que as próprias ferramentas (Netbeans, composer, git) lhe dão afim de encontrar a solução.

Perceba que eu não inicializei o repositório com o Git, caso não tenha trabalhado com o Git ainda sugiro que comece hoje mesmo! Em todo caso aí vai a dica: em seu terminal (não de ônibus mas sim aquela tela preta de seu sistema operacional) entre no diretório onde você criou seu projeto através do Netbeans e digite git init. Isto inicializará o versionamento (desde que o git esteja instalado é claro). Em seguida digite git add . (o ponto deve estar junto sim, ou então digite git add –all). Feito isso devem ser adicionados ao versionamento somente os arquivos .gitignore, seus temas e seus plugins excluídos do gitignore, todo o wordpress e vendors gerenciados pelo composer devem ser ignorados.

 

Quais as vantagens?

Inicialmente você pode pensar, nossa mas do jeito tradicional é muito mais simples! Sim, num primeiro momento com toda certeza é muito mais simples baixar e descompactar o wordpress, baixar seus plugins diretamente no painel administrativo e colar seu tema em wp-content/themes. O fato é que fazendo isso você está versionando TUDO (salvo algumas excessões no .gitignore) e isso não é apenas um problema mas sim um empenho desenecessário afinal de contas você não deve jamais mexer no core do WordPress então por que versioná-lo? Da mesma forma com plugins de terceiros, a regra é a mesma do core, NÃO devem ser alterados pois na primeira atualização todo o seu trabalho vai pro espaço. Obviamente que trabalhando desta forma a cultura dos desenvolvedores WordPress deve mudar pois tudo deve ser feito estendendo do core e de plugins ao invés de modificá-los diretamente. E isso é muito bom, pois basta que notemos os frameworks mais bem conceituados do mercado (Em minha humilde opinião: Zend 2, Symfony, Doctrine, Silex) ambos são gerenciados desta forma, eles são uma caixinha de ferramentas que você usa como ela é nunca modifica-se nada de seu core, nem de suas libs complementares.

Há outras vantagens como o próprio projeto WordPress Packagist enumera:

  • Impede que plugins e temas de terceiros estejam no versionamento de SUA aplicação
  • Supre o uso de submodulos do Git (que para muitos é confuso e é muito fácil que esqueçamos de atualizar os mesmos)
  • Gerencia dependências do WordPress e de qualquer outro vendor (trabalhando em conjunto com o Packagist. Ou seja, não é o fato de utilizar o repositório wpackagist que o oficial do composer deixa de funcionar)
  • Eventualmente pode gerenciar dependências entre plugins (como qualquer biblioteca do composer já faz, apenas restam  os desenvolvedores de plugins do WordPress se atentarem à isso).

 

Concluíndo

Confesso que isto tudo (WordPress e composer juntos desta forma) é novo pra mim e ainda tenho de avaliar os benefícios/dificuldades a longo prazo mas por hora recomendo fortíssimamente o uso desta dupla. Se você tem argumentos a favor ou contra o uso, deixe-os aqui nos comentários, ficarei feliz em trocar “figurinhas”.

Ah, este meu blog é versionado desta maneira então supõe-se de que isso funciona afinal de contas você está lendo este post não é mesmo?!

 

Recomendo a leitura: Composer – um pouco além do básico

 

Menu