Montando um projeto WordPress com Composer

Durante muito tempo, ao criar novos projetos usando WordPress, eu caía no dilema de como organizar o repositório.

Por um lado, eu queria que o repositório ficasse o mais limpo e leve possível, apenas com as coisas nas quais eu realmente estava trabalhando. Por outro lado, eu queria ter controle da versão do WordPress e dos plugins que eu estava usando no meu projeto. Deixar apenas o tema em que estava trabalhando no repositório acabava deixando o processo de deploy mais trabalhoso e inseguro, porque não estava registrado em nenhum lugar as versões em que aquele tema tinha sido desenvolvido.

A solução mais fácil era sempre adicionar o WordPress inteiro ao repositório, assim como os plugins de terceiros, e lá no meio desse monte de coisa, o meu tema, e eventualmente algum plugin que realmente fosse o que estava desenvolvendo.

Trabalhando em outros projetos, tive contato com o Composer, um gerenciador de dependências para PHP, mas demorei muito tempo para utilizá-lo em projetos WordPress. E só agora paro para relatar e documentar como venho organizando os projetos.

Este post vai mostrar um passo a passo de como montar o seu projeto WordPress usando Composer. Ele assume que você já usa git, conhece o Composer e já tem ele instalado. Se ainda não tem, comece com algum outro tutorial para instalar o composer e entender o básico dele – é bem simples.

Por que usar o Composer?

É comum que nossos projetos web sejam compostos de vários softwares ou bibliotecas desenvolvidos por terceiros. Um projeto de site em WordPress, por exemplo, onde você esteja desenvolvendo um tema sob medida, pode depender de vários plugins para funcionar. Além de plugins, você pode estar usando alguma biblioteca PHP e também precisa administrar essas dependências.

Para facilitar o desenvolvimento, é comum as pessoas colocarem tudo isso dentro do mesmo repositorio: o WordPress, o tema, os plugins, e as bibliotecas. Isso facilita a gestão do projeto, deixando o deploy mais fácil, porém deixa seu repositório imenso e desorganizado. Você está mantendo no seu repositório um monte de software que não é seu e, além disso, não está bem organizado quais são as dependências e em que versão elas estão.

É legal perceber, também, que em um projeto como este, o próprio WordPress é uma dependência.

Utilizando Composer você tem algumas vantagens:

  • Seu repositório fica limpo, apenas com aquilo que realmente você está desenvolvendo
  • Suas dependências estão explicitamente declaradas em um único lugar
  • A instalação e atualização das dependências é gerenciada pelo Composer
  • Suas dependências ficam seguras nas versões que você sabe que funcionam
  • Gera bem estar e paz de espírito

Vamos ver como fazer isso, para que você não precise manter o WordPress no seu repositório, mas siga tendo controle sobre qual versão está utilizando e ainda tenha uma ferramente ágil para fazer deploys e atualizações automatizadas.

Como fazer

Ok, você já está convencido de que isso é uma boa ideia, então mãos a obra.

Vamos começar um projeto do zero, com uma pasta vazia chamada ‘meusite’, e digamos que esta pasta será a pasta raíz do seu site.

Em uma instalação normal, você colocaria todos os arquivos do WordPress nesta pasta, e dentro dela também estariam as subpastas do WordPress wp-admin, wp-content e wp-includes. Aqui começaremos a fazer as coisas de maneira diferente.

Vamos começar criando nosso arquivo composer.json, que irá declarar quais são as dependências do nosso projeto. Crie um arquivo com este nome e coloque este conteúdo:


{
	
"require": {
		"johnpbloch/wordpress": "4.7.*"
	},
	"extra": {
		"wordpress-install-dir": "wp"
	}
}

Vamos entender o que este arquivo esta fazendo:

Em “require” estamos falando que nosso projeto depende do WordPress. A versão oficial do WordPress não inclui um arquivo composer.json e por isso utilizamos um fork, que é amplamente utilizado hoje em dia. Este fork nada mais é do que uma cópia exata do WordPress, atualizada a cada 15 minutos, adicionada do arquivo composer.json. Isso nos permite fazer a instalação e atualização.

Ainda neste momento estamos falando que queremos a versão 4.7.*. Isso significa que as atualizações de segurança (4.7.1, 4.7.2, etc) poderão ser feitas automaticamente quando rodarmos o comando composer update. Mas o projeto nunca passará para a versão 4.8 do WordPress (quando ela for lançada), a não ser que editemos este arquivo e façamos esta modificação.

A seção “extra” modifica o comportamento padrão do composer, que é instalar todas as dependências em uma pasta chamada vendor, e indica que queremos instalar o WordPress em uma pasta chamada wp.

Dessa maneira, ao rodarmos o comando composer install, será criada uma pasta “wp”, com todo o WordPress dentro dela. Essa pasta wp vamos colocar no .gitignore e nunca vamos enviá-la ao nosso repositório. No nosso repositorio vamos colocar apenas o tema que estamos trabalhando.

Percebam que agora o WordPress não está na raíz do seu site, e sim em um subdiretorio chamado “wp”. Portanto, temos duas coisas ainda para fazer:

  1. Mudar a pasta raíz do WordPress
  2. Mudar a localização da pasta wp-content do WordPress, para podermos deixar nosso tema fora da árvore do WordPress criada automaticamente pelo Composer e que não existirá no nosso repositório

Para mudar a pasta raíz do WordPress, vamos criar um arquivo chamado index.php com o seguinte conteúdo:


<?php
// WordPress bootstrap
define( 'WP_USE_THEMES', true );
require( './wp/wp-blog-header.php' );

Agora vamos criar nosso wp-config.php, a partir do wp-config-sample.php que vem com o WordPress, e salvá-lo nessa mesma pasta, um nível abaixo do que normalmente ele está.

Nota: Você não vai querer enviar o seu wp-config.php para o repositorio, crie um arquivo wp-config-sample.php na pasta raíz e faça essas modificações nele. Quando estiver pronto, faça uma cópia chamada apenas wp-config.php e insira as informações de banco de dados e senhas. Sempre que eu me referir aqui a modificações no wp-config estou considerando que você está fazendo elas no arquivo de modelo e, depois, replicando para o arquivo que de fato é lido pelo WP, mas que não é incluído no repositório

No seu wp-config, inclua as linhas:


define('WP_SITEURL', 'http://' . $_SERVER['SERVER_NAME'] . '/wp');
define('WP_HOME', 'http://' . $_SERVER['SERVER_NAME'] );

Aqui estamos considerando que sua instalação de WordPress está na raíz do domínio. Se não estiver, inclua aí o caminho completo depois do SERVER_NAME nas duas linhas.

Isso indicará ao WordPress que a raíz do site é uma, mas que o diretório de instalação do WordPress é outro. Você vai perceber que, ao acessar o admin, o endereço do site vai ter esse “wp” a mais.

Agora vamos modificar a pasta wp-content de lugar. Faça uma cópia dessa pasta toda para a pasta raíz do seu site. Em seguida, edite o wp-config e adicione as seguintes linhas:


define('WP_CONTENT_DIR', dirname( __FILE__ ) . '/wp-content' );
define('WP_CONTENT_URL', 'http://' . $_SERVER['SERVER_NAME'] . '/wp-content' );

Novamente, adicione o caminho completo depois de SERVER_NAME caso sua instalação esteja em um subdiretorio.

Isso está informando o WordPress a buscar a pasta wp-content em outro lugar, e agora você poderá incluir esta pasta wp-content, com o seu tema, sem precisar adicionar o WordPress inteiro no seu repositório.

Você pode agora acessa o navegador e rodar a instalação padrão do WordPress.

No final desse processo, sua pasta “meusite” tem os seguintes conteúdos:


wp-content
wp (* não será adicionada ao repositorio)
vendor (* não será adicionada ao repositorio)
wp-config-sample.php
wp-config.php (* não será adicionada ao repositorio)
index.php
composer.json
composer.lock 

Para garantir que nada é incluído no reposítório por engano, crie um arquivo chamado .gitignore com o seguinte conteúdo:


wp
vendor
wp-config.php 

Pronto. Você já tem um repositório com WordPress e pode adicionar seu tema na pasta wp-content. Seu repositório já está muito menor e mais organizado.

De agora em diante, para montar o ambiente deste projeto é só fazer git clone e, em seguida, composer install.

Mas e se tivermos outros plugins ou temas como dependências para o nosso projeto? Vamos ver isso agora.

Temas e plugins

A maneira mais fácil de adicionar temas ou plugins que estejam publicados no repositório oficial do WordPress é utilizar o repositório de pacotes WordPress Packagist.

Este site espelha todos os temas e plugins de WordPress e os prepara para serem utilizados pelo composer. Além disso, ele categoriza os pacotes, diferenciando temas plugins e mu-plugins, e já os pré-configurando para serem instalados dentro da pasta wp-content, e não na pasta vendor como normalmente o composer faz.

Para utilizar esse repositório precisamos declará-lo no nosso composer.json e, em seguida, podemos adicionar os temas e plugins que quisermos. Veja como fica nosso arquivo com alguns plugins:

{
	"repositories": [
		{
		"type": "composer",
		"url": "http://wpackagist.org"
		}
	],
	"require": {
		"johnpbloch/wordpress": "4.7.*",
		"wpackagist-plugin/advanced-custom-fields": "*",
		"wpackagist-plugin/posts-to-posts": "1.4.*"
	},
	"extra": {
		"wordpress-install-dir": "wp"
	}
}

Repare que, agora, apenas olhando para este arquivo, você já consegue ter uma visão geral do projeto e de suas dependências.

Toque final

Para deixar tudo ainda mais organizado, você pode querer remover do seu repositório algumas coisas que vem como padrão na pasta wp-content do WordPress mas que não serão usadas.

Por exemplo, você pode remover todos os temas twenty-* e o plugin “Hello Dolly”. Basta removê-los.

Outra dica útil, que agiliza o processo de instalação, é definir o tema que será usado por padrão, que provavelmente será o que você está desenvolvendo. Você pode definir isso no wp-config, e assim não será necessário fazer isso via admin. Basta adicionar essa linha:


define('WP_DEFAULT_THEME', 'meutema');

Referências

Aqui abaixo algumas referências boas usadas pra fazer esse post.

https://roots.io/using-composer-with-wordpress/

https://davidwinter.me/install-and-manage-wordpress-with-composer/

https://deliciousbrains.com/install-wordpress-subdirectory-composer-git-submodule/

Anúncios
Montando um projeto WordPress com Composer

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s