Wordpress e Composer - Parte 2

Post publicado em 12/09/2014 02:41 Última atualização em 18/06/2015 01:43

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.

Do que precisaremos?

Nada de diferente do que o post anterior, se você já fez o exemplo anterior pode seguir daqui tranquilamente, caso ainda não tenha feito sugiro que pare agora, leia o post WordPress e Composer para somente em seguida continuar com a leitura deste. Ah, sugiro também que seja iniciado um novo projeto e não reutilizado o anterior.  

O que mudou?

Mudou o fato de que como mostrado antes, era necessário instalar o WordPress à parte, ou seja, baixar, descompactar e colocar na pasta do nosso projeto. Isto não é mais necessário, basta que declaremos o projeto WordPress do Github como uma dependência, façamos algumas configurações e pronto!  

composer.json

Inicialmente é claro que declararemos um novo repositório para o WordPress.
"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 files
Prontinho 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
        └── hueman
Perceba que foram criadas as seguintes pastas:
  • vendor => default do composer
  • wp => a instalação do WordPress
  • wp-content => onde foram instalados o(s) tema(s) e o(s) plugin(s)
É possível prever que como a pasta wp-content ficou fora da instalação do WordPress será necessário realizar configurações adicionais, no entanto não se assuste, somente num primeiro momento aparenta ser complicado mas após algumas instalações será algo com que você se acostumará.  

Configurando o WordPress

Acesse o endereço em que seu projeto foi iniciado (no meu caso utilizei o apache do Fedora mesmo com o DocumentRoot apontando para /var/www/html). Acessando https://localhost/wp-composer (ou o nome que você definiu para seu projeto) é possível perceber a estrutura de pastas já listada acima. Entre na pasta wp. A tela que abre é a padrão da instalação do WordPress. Informe seus dados normalmente como em um instalação comum do mesmo. lista instalacao Após ter instalado o WordPress como de costume, entre nas configurações gerais do mesmo. configuracao 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.  

Copiando os arquivos necessários

Para que possamos acessar nossa instalação a partir da pasta raíz (https://localhost/wp-composer) e não mais em https://localhost/wp-composer/wp temos de COPIAR os arquivos index.php e .htaccess (caso já não esteja na raíz) de wp-content/wp para wp-composer e MOVER o arquivo wp-config.php de wp-content/wp para wp-composer. Após isto a nova estrutura de pastas deve ser exatamente assim: (a menos que você não trabalhe com URL amigável, caso seja seu cenário, o arquivo .htaccess não existirá)
.
├── .htaccess
├── composer.json
├── composer.lock
├── index.php
├── vendor
├── wp
├── wp-config.php
└── wp-content
 

Finalizando a configuração

Precisamos "dizer" ao index.php que o WordPress não está mais na raíz e sim em wp/.
...

/** 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. lista-temas lista-plugins 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. site-view  

Como fica o gitignore?

Fica exatamente do mesmo jeito que no exemplo do post anterior, ignora tudo e designora somente seu(s) tema(s) e plugins.   Se você seguiu todo este exemplo e gostou do utilizar o composer sugiro a leitura de mais posts que escrevi sobre o tema clicando aqui.  

Quer o fonte?

Disponibilizei o fonte da aplicação que criei para este post, ele serve como um esqueleto onde você pode tranquilamente reutilizar e complementar com suas necessidades. Código-fonte.  


Scroll down