Ao longo dos últimos anos, uma das maiores dificuldades ao desenvolver sites em WordPress complexos, com temas e plugins personalizados e com vários plugins de terceiros, é justamente manter todas essas dependências (incluindo o próprio WordPress) em sincroniza entre toda a equipe de desenvolvimento. Uma dessas maneiras é utilizar Composer para melhorar o workflow de desenvolvimento com WordPress.
Composer
Ele permite que você declare as bibliotecas dependentes que seu projeto precisa e as instala para você.
Caso não o conheça, leia mais, sobre o gerenciador de dependências PHP, em nosso artigo Composer: a evolução PHP e aprenda como fazer suas atualizações em Composer: como atualizar.
Instalando WordPress com Composer
Para adicionar o WordPress como uma dependência a ser instalado pelo Composer, precisaremos que o mesmo esteja no repositório oficial do Composer, o Packagist, ou em algum repositório de controle de versão com o GitHub (ou algum repositório privado). Como o WordPress não possui um repositório oficial no Packagist e também não possui uma versão em língua portuguesa no GitHub, vamos utilizar um repositório mantido pela webfatorial do WordPress (já cadastrado no Packagist).
Assim, vamos iniciar nosso composer.json
adicionando este repositório nos pacotes necessários para que o Composer o instale.
1 2 3 4 5 |
{ "require": { "webfatorial/wordpress": "3.9.1" } } |
Para completarmos essa instalação, ainda precisamos adicionar uma configuração extra para que a instalação do WordPress seja independente do conteúdo do nosso projeto – afinal, o objetivo é um desenvolvimento utilizando dependências.
Para informar ao Composer em qual pasta queremos que o core do WordPress seja instalado, é preciso adicionar o nó extra
ao nosso composer.json
e especificar um nome para este diretório que, no nosso caso, será “core”.
1 2 3 4 5 6 7 8 |
{ "require" : { "webfatorial/wordpress": "3.9.1" }, "extra": { "wordpress-install-dir": "core" } } |
WordPress Packagist
O WordPress Packagist é um projeto desenvolvido pela empresa Outlandish que tem como objetivo a disponibilização de um repositório para ser utilizado via Composer que espelha os repositórios de plugins e temas oficial do WordPress.
Para podermos começar a utilizar as vantagens do WordPress Packagist em nosso projeto, primeiramente precisamos adicionar seu repositório ao nosso arquivo composer.json
, adicionando um novo nó repositories
para que o Composer o identifique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "repositories": [ { "type": "composer", "url" : "http://wpackagist.org" } ], "require" : { "webfatorial/wordpress": "3.9.1" }, "extra": { "wordpress-install-dir": "core" } } |
Agora, podemos usar plugins/temas ao nosso projeto simplesmente adicionando ao nosso nó require
o nome do pacote (prefixado com “wpackagist-plugin/” e “wpackagist-theme/”, respectivamente) e sua versão, que pode ser informada de maneira específica (ex. “1.3.2”) ou qualquer versão utilizando “*” (ou alguma outra forma de especificar a versão de um pacote no Composer).
Em nosso exemplo, utilizaremos o tema Vantage e os plugins Akismet, W3 Total Cache e WordPress SEO by Yoast.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "repositories": [ { "type": "composer", "url" : "http://wpackagist.org" } ], "require": { "webfatorial/wordpress": "3.9.1", "wpackagist-plugin/akismet": "3.0.1", "wpackagist-plugin/w3-total-cache": "0.9.4", "wpackagist-plugin/wordpress-seo": "1.5.4.2", "wpackagist-theme/vantage": "1.2" }, "extra": { "wordpress-install-dir": "core" } } |
Prefira a utilização de versões específicas de seus plugins/temas para que uma atualização desapercebida não quebre o projeto.
Da mesma maneira que foi preciso especificar um diretório para o core do WordPress, será necessário especificar onde serão instalados os conteúdo específicos do projeto (geralmente no diretório “wp-content”). Para o nosso exemplo, vamos chamá-lo de “app”. Para isso, vamos adicionar mais algumas linhas no nó extra
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "repositories": [ { "type": "composer", "url" : "http://wpackagist.org" } ], "require": { "webfatorial/wordpress": "3.9.1", "wpackagist-plugin/akismet": "3.0.1", "wpackagist-plugin/w3-total-cache": "0.9.4", "wpackagist-plugin/wordpress-seo": "1.5.4.2", "wpackagist-theme/vantage": "1.2" }, "extra": { "wordpress-install-dir": "core", "installer-paths": { "app/plugins/{$name}/": ["type:wordpress-plugin"], "app/mu-plugins/{$name}/": ["type:wordpress-muplugin"], "app/themes/{$name}/": ["type:wordpress-theme"] } } } |
Nosso composer.json
já está quase pronto, precisamos apenas dizer para o Composer fazer uma cópia simples da pasta de idiomas do core do WordPress para nossa pasta do projeto. Para isso, adicionamos um novo nó script
para que seja executado após a instalação e sempre que houver uma atualização. Dessa forma, nosso administrativo ficará sempre em português.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
{ "repositories": [ { "type": "composer", "url" : "http://wpackagist.org" } ], "require" : { "webfatorial/wordpress": "3.9.1", "wpackagist-plugin/akismet": "3.0.1", "wpackagist-plugin/w3-total-cache": "0.9.4", "wpackagist-plugin/wordpress-seo": "1.5.4.2", "wpackagist-theme/vantage": "1.2" }, "extra": { "wordpress-install-dir": "core", "installer-paths": { "app/plugins/{$name}/": ["type:wordpress-plugin"], "app/mu-plugins/{$name}/": ["type:wordpress-muplugin"], "app/themes/{$name}/": ["type:wordpress-theme"] } }, "scripts": { "post-install-cmd": [ "mkdir -p app/languages/", "cp -R core/wp-content/languages/* app/languages/" ], "post-update-cmd": [ "mkdir -p app/languages/", "cp -R core/wp-content/languages/* app/languages/" ] } } |
E a música acontece
Agora que nosso arquivo composer.json
está pronto, nos deparamos com uma pasta de projeto com apenas um arquivo. Basta entrar no terminal, executar o comando composer install
e voilà! Temos nosso WordPress todo instalado com a seguinte estrutura:
1 2 3 4 5 6 7 8 9 10 |
--projeto |--app | |--languages | |--plugins | |--themes |--composer.json |--composer.lock |--core | |--wp-admin |--vendor |
Configurando o WordPress
Para que tudo funcione corretamente, precisamos configurar manualmente o WordPress para que ele compreenda os novos diretórios criados. Para começar, precisamos copiar o arquivo /core/wp-config-sample.php
para o diretório raiz e renomeá-lo para wp-config.php
. Precisamos, também, adicionar e alterar alguns dados.
Primeiramente, vamos adicionar os dados do banco de dados:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
define('DB_NAME', 'nome_do_banco_de_dados'); define('DB_USER', 'nome_usuario'); define('DB_PASSWORD', 'senha_usuario'); define('DB_HOST', 'host_do_servidor'); define('AUTH_KEY', 'chave_unica'); define('SECURE_AUTH_KEY', 'chave_unica'); define('LOGGED_IN_KEY', 'chave_unica'); define('NONCE_KEY', 'chave_unica'); define('AUTH_SALT', 'chave_unica'); define('SECURE_AUTH_SALT', 'chave_unica'); define('LOGGED_IN_SALT', 'chave_unica'); define('NONCE_SALT', 'chave_unica'); $table_prefix = 'wp_'; |
Para adicionar essas “chave_unica” você pode utilizar a própria API WordPress para gerar chaves de segurança.
Agora, precisamos adicionar algumas linhas de código para configurar nossos novos diretórios:
1 2 3 4 |
define('WP_CONTENT_DIR', dirname( __FILE__ ) . '/app'); define('WP_CONTENT_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/app'); define('WPMU_PLUGIN_DIR', dirname( __FILE__ ) . '/app/mu-plugins'); define('WPMU_PLUGIN_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/app/mu-plugins'); |
Caso a instalação do seu projeto esteja em um diretório específico do seu host (ex. http://localhost/projeto/), você precisará adicionar as linhas de código da seguinte maneira:
1 2 3 4 |
define('WP_CONTENT_DIR', dirname( __FILE__ ) . '/app'); define('WP_CONTENT_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/projeto/app'); define('WPMU_PLUGIN_DIR', dirname( __FILE__ ) . '/app/mu-plugins'); define('WPMU_PLUGIN_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/projeto/app/mu-plugins'); |
Para finalizar, também precisamos atualizar a definição do ABSPATH
no arquivo wp-config.php
para o novo diretório:
1 |
define('ABSPATH', dirname(__FILE__) . '/core/'); |
Depois, precisamos copiar o arquivo /core/index.php
para a pasta raiz e alterar o caminho da chamada do arquivo wp-blog-header.php
para a nova pasta “core” do WordPress.
1 |
require( dirname( __FILE__ ) . '/core/wp-blog-header.php' ); |
Nossa estrutura de pastas está dessa maneira:
1 2 3 4 5 6 7 8 9 10 11 12 |
--projeto |--app | |--languages | |--plugins | |--themes |--composer.json |--composer.lock |--core | |--wp-admin |--index.php |--vendor |--wp-config.php |
Agora, podemos executar nossa instalação do WordPress, bastando abrir no navegador seu host configurado (ex. http://localhost/).
Após instalar o WordPress e entrar no administrativo (segundo o exemplo, http://localhost/core/wp-admin), precisamos ativar o tema escolhido – já que o tema que vem ativo por padrão no WordPress não existe. Vá em Aparência > Temas e ative seu tema (no nosso caso, o Vantage).
Agora precisamos ir em Configurações > Geral > Endereço do site (URL) e remover o diretório /core
do endereço.
Finalizando as configurações do WordPress, seu site já está pronto para ganhar vida!
Atualizando o WordPress, plugins e temas
Para atualizar o “core” do WordPress, seus plugins e temas, basta entrar no seu composer.json
, adicionar a nova versão e depois executar composer update
.
Lembre sempre de testar seu site toda vez que fizer uma atualização antes de o colocar no servidor definitivo (ambiente de produção) para garantir que ele não vai quebrar – na verdade, este procedimento é sempre ma boa prática, mesmo se não estiver trabalhando com essa técnica de utilizar Composer para melhorar o workflow de desenvolvimento no WordPress.
Conclusão sobre usar WordPress com Composer
Quando os projetos em que participamos começam a ficar mais complexos e demandam um maior cuidado com sua estrutura e organização (leia-se: projetos mais profissionais), é preciso repensar a maneira com que atuamos neles e buscar soluções à altura.
Certamente, usar o Composer para melhorar o workflow de desenvolvimento com WordPress é uma das maneiras de buscar essa atualização na maneira de se trabalhar.