L'une des premières choses que WordPress fait pour charger les plugins est d'obtenir les plugins actifs tels qu'ils sont enregistrés dans la base de données:
$active_plugins = (array) get_option( 'active_plugins', array() );
Puisqu'il utilise, get_option()
nous pouvons utiliser le option_active_plugins
filtre pour modifier la liste des plugins actifs à la volée.
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' );
Remplacez simplement gravityforms/gravityforms.php
par le répertoire et le nom de fichier du plugin que vous souhaitez désactiver.
Le problème ici est que nous essayons d'affecter le chargement des plug - ins, donc nous ne pouvons pas le faire à partir de l' intérieur d' un plug - in, car il est trop tard. Dans le thème serait également trop tard.
Heureusement, WordPress a des " plug-ins indispensables". Ce sont des plug-ins que vous pouvez ajouter qui sont chargés avant et séparément dans les plug-ins standard et n'apparaissent pas dans la liste des plug-ins standard.
Tout ce que vous devez faire pour ajouter ce code à un plugin à utiliser est de créer un wp-content/mu-plugins
répertoire (s'il n'existe pas déjà) et de créer un fichier PHP (il peut s'appeler n'importe quoi) avec ce code. Vous n'avez pas besoin d'un en-tête de plugin ou d'autre chose.
Maintenant, ce code sera chargé avant tous les autres plugins lors du chargement de WordPress. Puisque notre filtre est en place, lorsque WordPress obtient la liste des plugins actifs pour charger le plugin que vous souhaitez désactiver, il sera filtré de cette liste si WP-CLI est actif.
get_option()
- être revient-il tôt lorsque la valeur est enregistrée dans des transitoires / similaires et que ce filtre est ignoré? (Ne fonctionne pas dans la plupart des cas, uniquement dans l'écran du plugin d'administration, il a été exécuté)