web-dev-qa-db-fra.com

Désactiver l'action du plugin/plugin via le thème

J'ai installé le plugin Google Analyticator sur mon site. J'utilise également le plugin MobilePress pour proposer un thème conçu pour les navigateurs mobiles autres que les smartphones. J'ai configuré Google Analytics pour Mobile pour une utilisation dans ce thème et souhaite désactiver le plug-in Analyticator car il inclut un appel à un fichier js plus volumineux.

Est-ce que quelqu'un sait s'il est possible de désactiver un plugin en utilisant functions.php ou une autre méthode?

Je crois avoir localisé le code qui ajoute les fonctions à la page. Par conséquent, s'il n'est pas possible de désactiver l'ensemble du plug-in, est-il possible d'arrêter les actions à exécuter? J'ai essayé de les désactiver directement sans succès. Voici le code du fichier plugin:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

J'ai essayé de supprimer ces actions avec:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

Toute aide est grandement appréciée.

16
PNMG

Lorsque WordPress active un plugin, il appelle la fonction activate_plugin(). Cette fonction active le plugin dans un bac à sable et redirige ailleurs en cas de succès. Quelques auteurs l'ont utilisé pour activer par programmation des dépendances de plugins.

Il existe une autre fonction, deactivate_plugin(), qui fait la même chose à l’inverse ... c’est en fait comment WordPress désactive les plug-ins lorsque vous cliquez sur "désactiver" ou "désactiver".

Pour désactiver un plugin installé, appelez simplement:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

Ou, pour désactiver plusieurs plugins à la fois:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

Il existe un deuxième paramètre (le premier est une chaîne ou un tableau des plugins à désactiver) qui vous permet de désactiver les plugins sans appeler de points d'ancrage. Par défaut, il est défini sur false et je vous recommande de le laisser de cette façon. Sauf si, pour une raison quelconque, vous souhaitez ignorer la désactivation, vous devez procéder comme suit:

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

Cela désactiverait simplement le plug-in, mais ne déclencherait rien de ce que le plug-in enregistré ferait lors de la désactivation. Donc, si le plugin supprime les options ou les tables de la base de données lorsqu'il est désactivé, vous voudrez faire cette désactivation "silencieuse" pour conserver cette information et l'utiliser ailleurs.

22
EAMann

C’est grâce à la brillante réponse d’EAMann ci-dessus, et j’ai pensé que cela pourrait également être utile pour l’affiche originale ...

J'avais besoin d'une solution pour m'assurer que les utilisateurs désactivaient mon plugin s'ils téléchargeaient la version premium (pour éviter d'éventuels conflits). Auparavant, je détectais son état avec is_plugin_active et montrais un message d'erreur d'administration aux utilisateurs qui l'invitaient à le désactiver. C'est BEAUCOUP plus lisse ...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

Remarque: ne semblait pas fonctionner sur register_activation_hook, mais admin_init fonctionne comme un charme.

11
Mark Jeldi

Voici ma solution, créer un plugin pouvant désactiver d'autres plugins comme celui-ci:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

Poussez ceci vers la production, activez-le, puis amenez la base de données sur votre machine de développement locale.

La source

1
user128526