Setelah beberapa tahun (seriously) saya akhirnya harus bersentuhan lagi dengan wordpress, banyak yang berubah sejak terakhir saya ngoprek, semakin bagus tetapi juga codebase semakin besar karena pergeseran fokus dari simply sebuah engine blog menjadi CMS platform yang sangat flexible.

Karena website ini membutuhkan beberapa 3rd party library maka saya mencoba mengintegrasikan wordpress dengan composer untuk mempermudah integrasi library dan autoloading, awalnya saya pikir akan sedikit sulit karena wordpress disini adalah sebagai webroot dan sekaligus sebagai package dependency, tetapi saya salah, ternyata sangat mudah, sudah ada composer library yang bisa digunakan untuk mendifinisikan webroot directory dan webroot package sehingga memungkinkan kita mendikte dimana kita akan mendeploy webroot package yang di-install melalui composer.

Another good news adalah wpackagist.org yang memiror hosting plugins & themes di wordpress.org dan menggunakan library composer installer sehingga memungkinkan kita menginstall wordpress themes & plugins yang ada di wordpress.org melalui composer dengan mengkonfigurasi installer-paths didalam composer.json

{
    "name": "chz/test",
    "description": "whatever it takes. lets roll",
    "homepage": "http://chazzuka.com",
    "license": "MIT",
    "authors": [
        {
            "name": "chz",
            "role": "Servant"
        }
    ],
    "repositories": [
        {
          "type": "composer",
          "url": "http://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 point yang penting dari composer.json diatas adalah

  1. Deklarasi package repositories untuk webroot-installer, wpackagist dan wordpress
  2. Spesifik untuk wordpress kita tandai sebagai webroot
  3. Diblok extra parameters kita konfigurasi bahwa webroot-package akan di deploy di webroot-dir, Semua dependency yang bertipe wordpress-plugin akan dideploy di public/content/plugins/{$name}/
  4. Wpackagist otomatis menandai wordpress plugins, themes dengan tipe yang sesuai.

Struktur direktori dari installasi wordpress + composer diatas dengan sedikit manual copy-paste sebagai berikut:

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 kalo bisa 5 minutes install?

Personal preferences sih, berikut apa yang saya suka dari installasi kustom ini.

  • Untuk mencegah backward compatibility break pada saat update core/plugins, dengan mendisabled update GUI update via wp-admin dashboard, instead update melalui composer, a simple composer update will do the job.
  • Dengan memisahkan installasi WP dan file-file webroot, composer update tidak akan konflik dengan existing webroot files yang sudah kita modifikasi.
  • Maintenance dependency lebih gampang, import dependency dan autoloading di handle via composer, A BIG WIN!
  • Dengan installasi custom ini VCS kita lebih clean karena benar-benar hanya berisi codebase sendiri
  • Dengan sedikit bantuan dari wp-original-media-path struktur URL di front-end bebas dari bawaan prefix wp- termasuk theme & plugin assets juga uploaded media, cuma akses ke wp-admin yang menggunakan uri wordpress.

It worth the extra work.

Suksma

© 2018 Komang. All Rights Reserved.

Made with in Kuta, Bali, Indonesia

Proudly published with Hugo