web-dev-qa-db-fra.com

Comment j'empêche le chargement d'un plugin lors de l'exécution de WP-CLI?

J'utilise actuellement ce code dans le fichier de plugins principal lui-même. Mais ce plugin n'est pas le mien, je préférerais donc pouvoir le mettre à jour normalement sans ajouter à chaque fois ce code.

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    exit;
}

Je dois le faire car ce plug-in génère des erreurs et empêche wp-cli de s'exécuter correctement. Je ne peux donc pas simplement désactiver le plug-in avec wp-cli, effectuer mes tâches et le réactiver.

Est-il possible de faire quelque chose comme if x then do not load plugin file x à partir d'un plug-in mu?

11
NextGenThemes

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() );

Comme il utilise get_option(), nous pouvons utiliser le filtre option_active_plugins 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' );

Il suffit de remplacer gravityforms/gravityforms.php par le répertoire et le nom du fichier du plug-in que vous souhaitez désactiver.

Le problème ici est que nous essayons d'influencer le chargement des plugins, nous ne pouvons donc pas le faire depuis dans un plugin, car il est trop tard. Dans le thème serait aussi trop tard.

Heureusement, WordPress a "Must Use Plugins" ce sont des plugins que vous pouvez ajouter et qui sont chargés avant et séparément des plugins normaux, et n'apparaissent pas dans la liste des plugins normaux.

Tout ce que vous avez à faire pour ajouter ce code à un plug-in à utiliser impérativement est de créer un répertoire wp-content/mu-plugins (s'il n'existe pas déjà) et de créer un fichier PHP (il peut être appelé n'importe quoi) avec ce code en elle. Vous n'avez pas besoin d'un en-tête de plugin ou quoi que ce soit d'autre.

Maintenant, ce code sera chargé avant tous les autres plugins lors du chargement de WordPress. Depuis que notre filtre est en place, lorsque WordPress obtient la liste des plugins actifs à charger, le plugin que vous souhaitez désactiver sera filtré de cette liste si WP-CLI est actif.

11
Jacob Peattie

Vous pouvez utiliser l'option skip-plugins dans WP-CLI pour ne pas charger des plug-ins individuels lorsque vous utilisez WP-CLI.

Vous pouvez soit l'utiliser dans une commande comme ceci:

wp user list --skip-plugins=my-plugin

Ou vous pouvez ajouter ceci à votre fichier wp-cli.yml:

skip-plugins:
- my-plugin
13
swissspidy