Dampak awal: frontend blank, admin ikut mati
display_errors biasanya dimatikan supaya pesan error tidak bocor ke pengunjung. Hasilnya, browser hanya menerima halaman kosong atau status 500 tanpa penjelasan apa pun.
Admin ikut mati karena urutan loading WordPress sama untuk frontend maupun wp-admin. Setiap request memuat core, lalu semua plugin aktif, lalu tema. Kalau satu plugin crash saat dimuat, proses berhenti sebelum halaman admin sempat dirender. Karena itu customer sering bilang "semuanya mati", padahal sumbernya cuma satu file di satu folder plugin.
Langkah klasiknya adalah rename folder plugin lewat File Manager atau FTP. Cara ini memang jalan, tapi kalau plugin aktifnya banyak, kita jadi menebak-nebak. WP-CLI membuat proses ini jauh lebih terarah.
Investigasi: memastikan masalahnya di plugin atau tema
--skip-plugins untuk melewati pemuatan plugin, dan --skip-themes untuk melewati pemuatan tema. Keduanya bisa dipakai tanpa nilai (lewati semua) atau dengan daftar slug yang dipisah koma (lewati yang disebut saja).
Masuk ke direktori instalasi WordPress sebagai user pemilik file. Hindari menjalankannya sebagai root. Kalau terpaksa, WP-CLI akan minta flag --allow-root, dan file yang dibuat bisa berakhir dengan owner yang salah. Setelah itu, jalankan tiga tes dasar ini:
BASH
# Tes 1: muat WordPress normal (kemungkinan besar gagal)
wp option get siteurl
# Tes 2: lewati semua plugin dan tema
wp option get siteurl --skip-plugins --skip-themes
# Tes 3: lewati tema saja, plugin tetap dimuat
wp option get siteurl --skip-themeswp option get siteurl dipilih karena perintahnya ringan, read-only, dan tetap memaksa WordPress dimuat penuh. Cara membaca hasilnya:
- Tes 1 gagal, tes 2 berhasil, tes 3 gagal: penyebabnya ada di plugin.
- Tes 1 gagal, tes 2 dan tes 3 berhasil: penyebabnya kemungkinan besar di tema aktif, termasuk
functions.php. - Tes 2 pun gagal: masalahnya di luar plugin dan tema biasa. Cek
wp-config.php, file core, must-use plugin diwp-content/mu-plugins, atau drop-in sepertiobject-cache.php. Jenis file ini umumnya tetap dimuat meski--skip-pluginsdipakai.
display_errors di web. Kalau path-nya mengarah ke wp-content/plugins/nama-plugin/, separuh pekerjaan sudah selesai. Tambahkan --debug kalau butuh detail lebih banyak tentang tahap loading mana yang sedang berjalan.
Mengisolasi plugin satu per satu
BASH
# Ambil daftar plugin aktif tanpa memuat plugin apa pun
wp plugin list --status=active --field=name --skip-plugins --skip-themes
# Coba muat WordPress sambil melewati satu plugin per putaran
for p in $(wp plugin list --status=active --field=name --skip-plugins --skip-themes); do
if wp option get siteurl --skip-plugins=$p --skip-themes >/dev/null 2>&1; then
echo "Berhasil dimuat tanpa plugin: $p"
fi
done--skip-plugins hanya berlaku untuk proses CLI itu sendiri dan tidak mengubah status aktif plugin di database. Ada beberapa pola hasil yang perlu dibaca dengan hati-hati:
- Satu nama muncul: hampir pasti itu plugin penyebabnya.
- Tidak ada nama yang muncul, padahal tes 2 tadi berhasil: bisa jadi ada dua plugin yang sama-sama rusak, atau dua plugin yang bentrok satu sama lain (misalnya sama-sama membawa library dengan nama class yang sama). Coba lewati dua plugin sekaligus, misalnya
--skip-plugins=plugin-a,plugin-b, mulai dari plugin yang baru di-update. - Beberapa nama muncul: biasanya salah satunya bergantung pada yang lain. Contohnya add-on yang ikut error kalau plugin induknya dilewati. Lihat log untuk memastikan mana yang asli.
Titik konfirmasi di PHP error log
error_log di direktori situs. Di VPS dengan PHP-FPM biasanya ada log per pool, dan web server juga punya error log sendiri. Kalau WP_DEBUG_LOG aktif, WordPress menulis ke wp-content/debug.log.
Yang dicari adalah baris PHP Fatal error dengan waktu yang cocok dengan munculnya keluhan:
TEXT
# contoh format output, bukan dari insiden nyata
PHP Fatal error: Uncaught Error: Call to undefined function contoh_fungsi() in /home/user/public_html/wp-content/plugins/contoh-plugin/includes/loader.php:42Call to undefined function atau Class not found biasanya berarti file plugin tidak lengkap setelah update yang terputus, atau plugin butuh plugin lain yang belum aktif. Cannot redeclare biasanya tanda dua plugin membawa kode yang sama. Error sintaks setelah server ganti versi PHP mengarah ke plugin yang belum kompatibel dengan versi tersebut.
Kalau kamu menyalakan WP_DEBUG_LOG sementara untuk investigasi, jangan lupa matikan lagi setelah selesai. File log yang dibiarkan bisa membengkak dan terbaca publik. Untuk catatan debugging WordPress yang lebih umum, lihat Catatan Praktis WordPress Performance & Debugging untuk Troubleshooting Sehari-hari.
Mitigasi sementara dan perbaikan yang lebih permanen
wp plugin deactivate nama-plugin --skip-plugins --skip-themes
Perintah ini mengubah daftar plugin aktif di database, jadi efeknya langsung terasa di web. Buka situs dan wp-admin untuk memastikan semuanya kembali normal. Kalau penyebabnya ternyata tema, cek tema yang tersedia dengan wp theme list --skip-plugins --skip-themes, lalu aktifkan sementara tema bawaan WordPress yang sudah terpasang lewat wp theme activate.
Tolong diingat bahwa menonaktifkan plugin bukan tindakan netral. Plugin keamanan, cache, membership, atau payment gateway yang mati bisa mengubah perilaku situs: form tidak terkirim, halaman member terbuka, checkout berhenti. Kabari pemilik situs fungsi apa yang sedang hilang, jangan cuma bilang "sudah normal".
Kalau plugin itu wajib ada, opsi berikutnya adalah rollback ke versi sebelumnya. Untuk plugin dari direktori WordPress.org, ada wp plugin install nama-plugin --version=<versi-sebelumnya> --force. Plugin premium biasanya perlu file ZIP versi lama dari vendornya. Sebelum rollback atau mengubah apa pun di database, ambil backup dulu dengan wp db export, supaya ada titik kembali kalau langkah berikutnya malah memperburuk keadaan.
Perbaikan jangka panjangnya lebih ke proses daripada tool:
- Update plugin satu per satu, bukan sekaligus semua. Kalau ada yang crash, tersangkanya cuma satu.
- Uji update di staging dulu untuk situs yang menghasilkan uang atau menangani data penting.
- Cek kompatibilitas versi PHP sebelum hosting atau server menaikkan versi PHP.
- Pertimbangkan ulang auto-update untuk plugin yang kritis bagi bisnis. Ini trade-off antara cepat dapat patch keamanan dan risiko situs mati di jam yang tidak ada orang berjaga.
- Pastikan email admin WordPress masih aktif. Versi WordPress yang lebih baru bisa mengirim email recovery mode saat fatal error terjadi, dan email itu sering jadi petunjuk pertama.
--skip-plugins kalau penyebabnya belum jelas, lalu konfirmasi dari error log sebelum menonaktifkan apa pun. Semua langkah sampai tahap konfirmasi itu read-only, jadi aman dicoba di situs yang sedang down. Perubahan baru dilakukan setelah kamu tahu persis plugin mana yang harus dimatikan.