Salah satu hal pertama yang dilakukan WordPress untuk memuat plugin adalah mendapatkan plugin aktif seperti yang disimpan dalam database:
$active_plugins = (array) get_option( 'active_plugins', array() );
Karena menggunakan get_option()
kita dapat menggunakan option_active_plugins
filter untuk mengubah daftar plugin aktif dengan cepat.
function wpse_301282_disable_plugin( $active_plugins ) {
if ( defined( 'WP_CLI' ) && WP_CLI ) {
$key = array_search( 'gravityforms/gravityforms.php', $active_plugins );
if ( $key ) {
unset( $active_plugins[$key] );
}
}
return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );
Ganti saja gravityforms/gravityforms.php
dengan direktori dan nama file plugin yang ingin Anda nonaktifkan.
Masalahnya di sini adalah bahwa kami mencoba untuk mempengaruhi pemuatan plugin, jadi kami tidak dapat melakukannya dari dalam plugin, karena sudah terlambat. Dalam temanya juga akan terlambat.
Untungnya WordPress memiliki "Harus Gunakan Plugin" ini adalah plugin yang dapat Anda tambahkan yang dimuat sebelum dan secara terpisah ke plugin biasa, dan tidak muncul dalam daftar plugin biasa.
Yang perlu Anda lakukan untuk menambahkan kode ini ke dalam Must Use Plugin adalah membuat wp-content/mu-plugins
direktori (jika belum ada) dan membuat file PHP (bisa disebut apa saja) dengan kode itu di dalamnya. Anda tidak perlu header plugin atau apa pun.
Sekarang kode itu akan dimuat sebelum semua plugin lain ketika WordPress dimuat. Karena filter kami sudah ada, ketika WordPress mendapatkan daftar plugin aktif untuk memuat plugin yang ingin Anda nonaktifkan akan disaring dari daftar itu jika WP-CLI aktif.
get_option()
kembali lebih awal ketika nilainya disimpan dalam transien / serupa dan filter ini dilewati? (Tidak bekerja untuk kebanyakan kasus, hanya di layar plugin admin itu benar-benar dieksekusi)