WordPress dengan Composer

Setelah beberapa tahun (seriously) saya akhirnya harus bersentuhan lagi dengan WordPress. Banyak yang berubah sejak terakhir saya ngoprek — semakin bagus, tapi codebase-nya juga semakin besar karena pergeseran fokus dari sekedar engine blog menjadi CMS platform yang sangat fleksibel.
Project yang sedang saya kerjakan butuh beberapa 3rd-party library, jadi saya coba integrasikan WordPress dengan Composer untuk mempermudah dependensi dan autoloading. Awalnya saya pikir akan sulit — WordPress di sini berperan ganda sebagai webroot sekaligus package dependency. Ternyata salah; sudah ada library Composer yang bisa mendefinisikan webroot directory dan webroot package sehingga kita bisa mendikte di mana paket di-deploy.
Kabar baik berikutnya: wpackagist.org me-mirror plugin dan theme dari wordpress.org dan menggunakan composer installer, jadi kita bisa instal plugin/theme via Composer dengan mengkonfigurasi installer-paths di composer.json.
Konfigurasi composer.json
{
"name": "chz/test",
"description": "whatever it takes. lets roll",
"license": "MIT",
"repositories": [
{ "type": "composer", "url": "https://wpackagist.org" },
{
"type": "package",
"package": {
"name": "wordpress",
"type": "webroot",
"version": "3.8",
"dist": {
"type": "zip",
"url": "https://github.com/WordPress/WordPress/archive/3.8.zip"
},
"require": { "fancyguy/webroot-installer": "1.0.0" }
}
}
],
"require": {
"php": ">=5.3.0",
"wordpress": "3.8",
"fancyguy/webroot-installer": "1.0.0",
"wpackagist/wp-original-media-path": "1.3.0",
"wpackagist/w3-total-cache": "0.9.3"
},
"require-dev": {
"wpackagist/debug-bar": "~0.8",
"wpackagist/debug-bar-console": "~0.3"
},
"extra": {
"wp-content": "public/content",
"webroot-dir": "public/wp",
"webroot-package": "wordpress",
"installer-paths": {
"public/content/plugins/{$name}/": ["type:wordpress-plugin"],
"public/content/themes/{$name}/": ["type:wordpress-theme"]
}
}
}
Beberapa poin penting:
- Deklarasi package repositories untuk
webroot-installer,wpackagist, danwordpress. - Spesifik untuk WordPress kita tandai sebagai
webroot. - Di blok
extra,webroot-packagedi-deploy kewebroot-dir. Semua dependency bertipewordpress-plugindi-deploy kepublic/content/plugins/{$name}/. - Wpackagist otomatis menandai plugin dan theme dengan tipe yang sesuai.
Struktur Direktori
Hasilnya, dengan sedikit manual copy-paste:
public/
├── content/
│ ├── themes/
│ └── plugins/
├── media/
├── wp/
├── index.php
├── wp-config.php
├── wp-config-production.php
└── wp-config-local.php
vendor/
composer.json
Trus Ngapain Susah-susah?
Pertanyaan yang valid kalau ada 5-minutes install. Personal preference — berikut yang saya suka dari instalasi kustom ini:
- Mencegah backward-compatibility break saat update core/plugin: GUI update di
wp-admindi-disable, semua update dilakukan via Composer.composer updateselesai. - Karena instalasi WP terpisah dari file webroot yang sudah dimodifikasi,
composer updatetidak konflik. - Maintenance dependency lebih gampang — import dan autoloading di-handle Composer. A big win.
- VCS lebih bersih, hanya berisi codebase milik kita.
- Dengan bantuan
wp-original-media-path, struktur URL di front-end bebas dari prefix bawaanwp-— termasuk asset theme/plugin dan uploaded media. Hanya akseswp-adminyang masih menggunakan URI WordPress.
It worth the extra work.
Suksma.
