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

13

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

Quelqu'un sait-il s'il est possible de désactiver un plugin à l'aide de functions.php ou d'une autre méthode?

Je pense avoir localisé le code qui ajoute les fonctions à la page. Par conséquent, s'il n'est pas possible de désactiver l'intégralité 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.

    
posée PNMG 15.03.2011 - 22:36

3 réponses

21

Lorsque WordPress active un plugin, il appelle la fonction activate_plugin() . Cette fonction active le plugin dans un sandbox 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 plug-in 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 plug-ins à désactiver) qui vous permet de désactiver les plug-ins sans appeler les points d'ancrage de désactivation. Par défaut, il est défini sur false et je vous recommande de le laisser ainsi. 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 ne ferait que désactiver 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 peut-être procéder à cette désactivation "silencieuse" pour conserver ces informations et les utiliser ailleurs.

réponse donnée EAMann 15.03.2011 - 22:53
11

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

J'avais besoin d'une solution pour m'assurer que les utilisateurs désactivaient mon plug-in 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 de l'administrateur pour inviter les utilisateurs à l'éteindre. 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 semble pas fonctionner avec register_activation_hook, mais admin_init fonctionne comme un charme.

    
réponse donnée Mark Jeldi 20.03.2012 - 13:24
1

Voici ma solution: créer un plugin qui puisse 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);
}

Mettez ceci en production, activez-le, puis transférez la base de données sur votre machine de développement locale.

Source

    
réponse donnée user128526 26.09.2017 - 11:48

Lire d'autres questions sur les étiquettes