Plugin / Plugin-Aktion über Theme deaktivieren

19

Ich habe das Google Analyticator-Plugin auf meiner Website installiert . Ich verwende das MobilePress-Plugin auch , 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.

PNMG
quelle
Was mich betrifft, sollte dies technisch funktionieren, sodass es etwas an Ihrem Timing für die Ausführung dieses Codes gibt, das schief geht (zu früh oder zu spät). Bitte geben Sie weitere Informationen.
Rarst
Ja, ich dachte, es würde auch funktionieren. Ich habe nicht allzu viel Erfahrung mit dem Hinzufügen / Entfernen von Aktionen, daher war ich mir nicht sicher, wie ich es weiter debuggen sollte. Nach welchen weiteren Informationen suchten Sie, obwohl die Antwort von EAMann funktioniert hat?
PNMG
Ich bin ein wenig verwirrt - ist es nicht einfacher, das Plugin mit normalen Mitteln zu deaktivieren, wenn es endgültig entfernt werden muss? Welche EAManns Antwort tut das nur per Code. Ich nahm an, Sie wollten es unter bestimmten Bedingungen dynamisch deaktivieren ...
Rarst
Ich habe ein reguläres Thema, das in WordPress für jeden normalen Desktop-Browser eingestellt ist. Für dieses Thema möchte ich das GA-Plugin verwenden. Das mobilepress-Plugin verwendet PHP, um die User-Agent-Zeichenfolge abzurufen, und verwendet ein anderes Thema als ein Smartphone oder ein Nicht-Smartphone. Ich wollte die Datei functions.php für das Nicht-Smartphone-Design verwenden, um zu verhindern, dass das GA-Plugin die JS nur für dieses Design in den <head> einfügt. Für die beiden anderen Themen (Desktop und Smartphone) muss es noch aktiviert werden. Hilft das zu klären?
PNMG
Ja, das dachte ich mir. Bei Deaktivierung wird das Plugin jedoch dauerhaft deaktiviert und es bleibt ausgeschaltet, bis es explizit aktiviert wird. Ich sehe es nicht passend für Ihren Anwendungsfall.
Rarst

Antworten:

25

Wenn WordPress ein Plugin aktiviert, ruft es die activate_plugin()Funktion 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 noch 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.

EAMann
quelle
Tolle Antwort - und das nicht nur im Vergleich zu einer anderen, sagen wir, lustlosen Antwort auf "Here's a Website", die irgendwo in der Nähe sein könnte.
Herausgeber
Dieser Code in der functions.php deaktiviert das Plugin im Admin und deaktiviert es damit für die anderen beiden Themes. Vielen Dank, Rarst, für diesen Hinweis. Ich wollte es nur für das eine Thema deaktivieren, in dem sich die Datei functions.php befand.
PNMG
Sie verwenden immer nur ein Thema auf einer bestimmten Site. Wenn Sie das Plugin jedoch nach dem Deaktivieren des Themas erneut aktivieren möchten, ist dies ebenfalls möglich.
EAMann
11

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.

Mark Jeldi
quelle
1
Nur zur Erinnerung, ich bin mir ziemlich sicher, dass is_plugin_active bereits im Haken disable_plugins aktiviert ist, sodass es nicht noch einmal ausgeführt werden muss
Bryan Willis,
1

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

user128526
quelle