WordPress'in eklentileri yüklemek için yaptığı ilk şeylerden biri, aktif eklentileri veritabanına kaydedildiği gibi elde etmektir:
$active_plugins = (array) get_option( 'active_plugins', array() );
Kullandığı get_option()
için option_active_plugins
filtreyi, etkin eklentilerin listesini anında değiştirmek için kullanabiliriz .
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' );
gravityforms/gravityforms.php
Devre dışı bırakmak istediğiniz eklentinin dizin ve dosya adıyla değiştirin .
Buradaki sorun, eklentilerin yüklenmesini etkilemeye çalışmamızdır, bu yüzden bunu bir eklenti içinden yapamayız , çünkü çok geç. Tema da çok geç olurdu.
Neyse ki WordPress "Eklentileri Kullanmalı" dır. Bunlar, eklentilerden önce ve ayrı olarak yüklenen ve normal eklentiler listesinde görünmeyen eklentilerdir.
Bu kodu bir Zorunluluk Kullanmalı Eklentiye eklemek için yapmanız gereken tek şey bir wp-content/mu-plugins
dizin oluşturmak (zaten yoksa) ve içinde bu kodla bir PHP dosyası (herhangi bir şey olarak adlandırılabilir) oluşturmaktır. Eklenti başlığına veya başka bir şeye ihtiyacınız yok.
WordPress yüklendiğinde bu kod diğer tüm eklentilerden önce yüklenecek. Filtremiz yerinde olduğundan, WordPress devre dışı bırakmak istediğiniz eklentiyi yüklemek için etkin eklentilerin listesini aldığında, WP-CLI etkinse bu listeden filtrelenecektir.
get_option()
Değer geçici / benzerlere kaydedildiğinde ve bu filtre atlandığında belki erken dönüyor olabilir? (Çoğu durumda işe yaramaz, yalnızca yönetici eklentisi ekranında gerçekten yürütülür)