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.
