Optistream menggabungkan dua belas plugin WordPress kustom ke dalam satu basis kode tunggal tanpa kehilangan SEO untuk satu ribu halaman publiknya.
Mengapa penggabungan ini penting
Situs WordPress pada umumnya berakhir dengan segelintir plugin; situs yang lebih besar tampak seperti bengkel yang penuh dengan kabel, masing-masing berdengung tetapi tidak ada yang mudah dicabut. Situs Optistream menjalankan dua belas plugin khusus yang menangani profil streamer, tim esports, dan data game. Plugin-plugin tersebut menghasilkan seribu halaman yang dapat diindeks. Menjaga URL tersebut tetap utuh adalah hal yang tidak bisa ditawar—perubahan apa pun akan menggagalkan migrasi tersebut.
Seperti apa pengaturan lamanya
Dua belas plugin tersebut masing-masing berada di foldernya sendiri, mendaftarkan tipe postingan kustom (custom post type) sendiri, dan terhubung (hook) ke WordPress pada titik yang berbeda. Masalah pun menumpuk:
- Hooks dan aset tersebar, sehingga sulit untuk memprediksi kode mana yang berjalan kapan.
- Logika perutean (routing) berada di banyak file terpisah, sehingga satu URL dapat dipengaruhi oleh beberapa plugin.
- File CSS dimuat dalam urutan yang tidak terprediksi, menyebabkan bentrokan gaya (style clashes).
- Proses debugging mengharuskan pembukaan dua belas direktori yang berbeda, yang membuang-buang waktu bagi pengembang mana pun.
Tujuannya bukan untuk mengurangi jumlah file; melainkan untuk memberikan satu siklus hidup (lifecycle) tunggal bagi seluruh sistem dan satu tempat untuk mengelola dependensi.
Bagaimana migrasi direncanakan
Tim memperlakukan antarmuka publik—URL, templat, dan metadata—sebagai kontrak yang tidak boleh dilanggar. Apa pun yang berubah di sisi front end akan dianggap sebagai kegagalan. Dengan aturan tersebut, mereka menyusun daftar periksa (checklist) untuk dijalankan setelah setiap langkah.
1. Daftar kontrak publik
Setiap jalur URL dicatat beserta tipe postingan, rewrite slug, file templat, dan kunci meta (meta keys) yang digunakannya. Spreadsheet ini menjadi buku panduan: jika sebuah URL berubah setelah modul dipindahkan, migrasi akan dibatalkan (rolled back).
2. Bangun loader sederhana
Sebuah file bootstrap kecil dibuat. Setiap plugin lama kini mendaftarkan satu "domain konten" melalui nama fungsi yang dapat diprediksi. Loader ini tidak melakukan hal yang rumit—hanya cukup untuk menarik modul yang tepat ke dalam WordPress saat dibutuhkan. Kesederhanaan membuat kegagalan menjadi jelas.
3. Lindungi data
Mengubah nama kunci meta akan mengubah perubahan kode menjadi migrasi data, yang menambah risiko yang tidak perlu. Kunci lama tetap tidak tersentuh; fungsi pembantu (helper functions) baru membungkusnya, menjaga skema basis data tetap stabil.
4. Perbaiki kepemilikan CSS
Konflik gaya diselesaikan dengan tiga langkah:
- File CSS modul dimasukkan ke dalam antrean (enqueued) dengan prioritas tinggi agar dimuat terakhir.
- Semua selektor dibatasi (scoped) ke kelas pembungkus (wrapper class) yang unik untuk setiap modul.
filemtime()digunakan saat melakukan enqueue untuk membersihkan cache browser jika ada perubahan pada stylesheet.
5. Gunakan loop yang aman
Migrasi dilakukan satu per satu modul. Setelah memindahkan sebuah modul, tim memverifikasi pendaftaran tipe postingan, perutean, dan tata letak seluler sebelum menyentuh modul berikutnya. Plugin asli tetap terpasang tetapi tidak aktif, menyediakan jalur pembatalan (rollback) instan.
Daftar periksa produksi
Setelah setiap pertukaran modul, tim memverifikasi:
- Setiap URL tipe konten mengembalikan status HTTP 200.
- Header URL kanonikal sesuai dengan URL asli.
- Judul halaman dan deskripsi meta tidak berubah.
- Semua gambar dimuat tanpa tautan yang rusak.
- Tidak ada luapan horizontal (horizontal overflow) yang muncul pada layar seluler.
- Konsol browser menunjukkan nol kesalahan JavaScript atau CSS.
Hanya setelah daftar periksa terpenuhi, tim menonaktifkan plugin lama secara permanen.
Apa yang diberikan oleh plugin baru
Plugin tunggal yang dihasilkan tidak memperkecil basis kode; ia hanya membuat batasan-batasannya terlihat jelas. Ke-dua belas area fungsional kini berbagi satu siklus hidup, satu set hooks, dan satu tempat untuk mengelola dependensi. Plugin baru tersebut tidak membuat sistem menjadi lebih kecil. Ia membuat batasan-batasannya terlihat jelas. Hal itu terbukti lebih berguna daripada memiliki lebih sedikit plugin.
Risiko dan argumen penentang
Kasus Optistream menunjukkan bahwa pendekatan disiplin yang mengutamakan kontrak (contract-first) dan peluncuran bertahap dapat menjaga risiko tetap terkendali.
Apa yang perlu diperhatikan selanjutnya
Jika Anda mempertimbangkan konsolidasi serupa, mulailah dengan dua pilar ini:
- Stabilitas URL – petakan setiap jalur publik sebelum Anda menulis satu baris kode pun.
- Stabilitas data – hindari mengubah nama kolom basis data kecuali Anda siap untuk melakukan migrasi penuh.
Dari sana, bangun loader kecil, jaga agar CSS tetap terbatasi (scoped), dan pindahkan modul satu per satu sambil menjalankan daftar periksa produksi yang ketat.
