web-dev-qa-db-de.com

Plugin/Plugin-Aktion über Theme deaktivieren

Ich habe das Google Analyticator-Plugin auf meiner Website installiert. Ich benutze auch das MobilePress-Plugin , um ein Thema für mobile Browser zu erstellen, die keine Smartphones sind. Ich habe Google Analytics für Handys für die Verwendung in diesem Thema eingerichtet und möchte das Analyticator-Plug-in deaktivieren, da es einen Aufruf einer größeren js-Datei enthält.

Weiß jemand, ob es möglich ist, ein Plugin mit functions.php oder einer anderen Methode zu deaktivieren?

Ich glaube, ich habe den Code gefunden, der die Funktionen zur Seite hinzufügt. Wenn es also nicht möglich ist, das gesamte Plugin zu deaktivieren, können dann die auszuführenden Aktionen abgebrochen werden? Ich habe versucht, sie ohne Glück direkt zu deaktivieren. Hier ist der Code aus der Plugin-Datei:

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

Ich habe versucht, diese Aktionen zu entfernen mit:

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

Jede Hilfe wird sehr geschätzt.

16
PNMG

Wenn WordPress ein Plugin aktiviert, ruft es die Funktion activate_plugin() auf. Diese Funktion aktiviert das Plugin in einer Sandbox und leitet es bei Erfolg an eine andere Stelle weiter. Es wurde von einigen Autoren verwendet, um Plugin-Abhängigkeiten programmgesteuert zu aktivieren.

Es gibt eine andere Funktion, deactivate_plugin(), die genau das Gegenteil bewirkt ... WordPress deaktiviert Plug-Ins, wenn Sie auf "Deaktivieren" oder "Deaktivieren" klicken.

Um ein installiertes Plugin zu deaktivieren, rufen Sie einfach auf:

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

Oder, um mehrere Plugins gleichzeitig zu deaktivieren:

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

Es gibt einen zweiten Parameter (der erste ist entweder ein String oder ein Array der zu deaktivierenden Plugins), mit dem Sie die Plugins deaktivieren können, ohne Deaktivierungs-Hooks aufzurufen. Standardmäßig ist es auf false gesetzt, und ich empfehle, dass Sie es so belassen. Wenn Sie die Deaktivierung nicht aus irgendeinem Grund umgehen möchten, tun Sie Folgendes:

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

Dies würde nur das Plugin ausschalten, aber es würde nichts auslösen, wofür das Plugin bei der Deaktivierung registriert ist. Wenn das Plugin also Optionen oder DB-Tabellen entfernt, wenn es deaktiviert ist, möchten Sie diese "stille" Deaktivierung durchführen, um diese Informationen zu erhalten und an anderer Stelle zu verwenden.

22
EAMann

Dies ist der hervorragenden Antwort von EAMann zu verdanken, und ich dachte, es könnte auch für das Originalplakat hilfreich sein ...

Ich brauchte eine Lösung, um sicherzustellen, dass Benutzer mein Plugin deaktiviert haben, wenn sie die Premium-Version hochgeladen haben (um mögliche Konflikte zu vermeiden). Zuvor erkannte ich den Status mit is_plugin_active und zeigte eine Administrator-Fehlermeldung an, um Benutzer zum Ausschalten aufzufordern. Das ist VIEL glatter ...

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

Hinweis: Scheint nicht mit register_activation_hook zu funktionieren, aber admin_init funktioniert wie ein Zauber.

11
Mark Jeldi

Hier ist meine Lösung, ein Plugin zu erstellen, das andere Plugins wie folgt deaktivieren kann:

/*
 * 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);
}

Übertragen Sie dies auf die Produktion, aktivieren Sie es und bringen Sie die Datenbank auf Ihren lokalen Entwicklercomputer.

Quelle

1
user128526