No post anterior mostrei como gerenciar plugins e temas do WordPress com o Composer no entanto eu mesmo senti falta da possibilidade de gerenciar o próprio WordPress através do composer, afinal de contas ele é uma biblioteca de terceiros, apenas utilizamos o mesmo como base para nossa aplicação. Este post visa mostrar o caminho (um pouco árduo) para adicionar o core do WordPress como uma dependência do composer e finalmente trabalharmos estritamente em NOSSA aplicação.
"repositories": [
{
"type": "composer",
"url": "https://wpackagist.org"
},
{
"type": "package",
"package": {
"name": "wordpress",
"type": "webroot",
"version": "4.0",
"dist": {
"type": "zip",
"url": "https://github.com/WordPress/WordPress/archive/4.0.zip"
},
"require": {
"fancyguy/webroot-installer": "1.0.0"
}
}
}
],
Note que além do WPackagist que já tínhamos no post anterior agora temos um repositório do tipo package apontando para a última versão do WordPress oficial no github. As definições básicas para este pacote são tipo ("type" : "package"), pacote ("package": {...}) configurado com o nome ("name": "wordpress"), tipo ("type": "webroot"), versão ("version": "#"), como o pacote será baixado ("dist" : {"type": "zip", "url": "url-do-wordpress"}) e por último o que o instalador do Wordpress requer. Neste caso precisamos instalar o "fancyguy/webroot-installer" para que o WordPress seja instalado na raíz de nosso projeto.
Até aqui temos a definição de um novo repositório para o composer, agora temos mais dois passos a seguir. O primeiro é informar que precisaremos do WordPress em nossa aplicação.
"require": {
"php": ">=5.3.0",
"wordpress": "4.0",
"wpackagist-plugin/advanced-custom-fields": "*",
"wpackagist-theme/hueman": "*"
},
Obviamente que a versão do WordPress a ser definida no require deve ser a mesma registrada como repositório.
O segundo passo é informar que o WordPress deve ser instalado na raíz de nosso projeto e não em vendor como é o default do composer.
"extra": {
"webroot-dir": "wp",
"webroot-package": "wordpress"
}
Ok, agora temos tudo pronto para a instalação do WordPress, um plugin e um tema. Supondo que você iniciou um projeto do zero para este teste, chegou a hora de instalar o nossas dependências. Vou mostrar aqui a instalação através do terminal mesmo pois se você seguiu o post anterior e fez através do Netbeans, o processo é o mesmo (clica com o botão direito no nome do projeto, vai em composer, clica em "install (dev)" e aguarda a instalação).
$ composer install Loading composer repositories with package information Installing dependencies (including require-dev) - Installing fancyguy/webroot-installer (1.0.0) Downloading: 100% - Installing composer/installers (v1.0.18) Loading from cache - Installing wordpress (4.0) Downloading: 100% - Installing wpackagist-plugin/advanced-custom-fields (4.3.9) Downloading: 100% - Installing wpackagist-theme/hueman (1.4.3) Downloading: 100% Writing lock file Generating autoload filesProntinho sua estrutura de pasta deve estar exatamente dessa forma:
. ├── composer.json ├── composer.lock ├── vendor │ ├── autoload.php │ ├── composer │ │ ├── ... │ └── fancyguy │ └── webroot-installer ├── wp │ ├── index.php │ ├── license.txt │ ├── readme.html │ ├── wp-admin │ │ ├── ... │ ├── wp-content │ │ ├── index.php │ │ ├── plugins │ │ └── themes │ ├── wp-includes │ │ ├── ... │ ├── wp-*.php └── wp-content ├── plugins │ └── advanced-custom-fields └── themes └── huemanPerceba que foram criadas as seguintes pastas:
Após ter instalado o WordPress como de costume, entre nas configurações gerais do mesmo.
Perceba na imagem acima que a URL do WordPress é diferente da URL do site. Isto é possível fazer no WordPress desde a versão 3.5 e consiste basicamente em possibilitar separar nossa aplicação do core do WordPress. O Core está alocado na pasta wp-composer/wp já nossos temas e plugins ficarão em wp-composer.
. ├── .htaccess ├── composer.json ├── composer.lock ├── index.php ├── vendor ├── wp ├── wp-config.php └── wp-content
... /** Loads the WordPress Environment and Template */ //Altere isso require( dirname( __FILE__ ) . '/wp-blog-header.php' ); //Para isso require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );Agora resta apenas informar ao WordPress que nossa pasta de conteúdo (wp-content) alterou. Isto é feito definindo duas constantes no arquivo wp-config.php nas raíz do projeto.
...
define('WP_DEBUG', false);
define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/wp-content' );
define( 'WP_CONTENT_URL', 'https://localhost/wp-composer/wp-content' );
...
Prontinho, o WordPress já reconhece todos os temas e plugins que você adicionar em wp-content, bem como os uploads de arquivos são gravados ali.
Note na URL do admin que entramos em wp-composer/wp isso é normal. Somente o site/blog (incluindo imagens, css, js arquivos...) não possui /wp na URL e o funcionamento é pleno bem como em uma instalação convencional.