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:
. ├── .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.