Ich möchte ein Plugin für einen bestimmten Benutzer deaktivieren. Ich verwende den folgenden Code in einer wp-content/plugin-mu
Plugin-Datei:
add_filter( 'option_active_plugins', 'bo_disable_apm_plugin' );
function bo_disable_apm_plugin( $plugins ) {
global $current_user;
// Not use advanced page manager for media manager
if ( is_admin() && in_array( 'media_manager', $current_user->roles ) ) {
$key = array_search( 'advanced-page-manager/advanced_page_manager.php' , $plugins );
if ( false !== $key ) {
unset( $plugins[$key] );
}
}
return $plugins;
}
Natürlich funktioniert es nicht. Ich verstehe den Weg nicht option_active_plugins
. Durch das Speichern von Daten finde ich heraus, dass der Code siebenmal ausgeführt wird.
In der ersten Schleife ist der Benutzer nicht bekannt, sodass die Bedingung nicht erfüllt ist. Das Plugin ist noch aktiviert.
Ich habe einen komplizierteren Code mit drei Bedingungen hinzugefügt: Deaktivieren Sie das Plugin, wenn der Benutzer nicht festgelegt ist, sodass das Plugin jedes Mal in der ersten Schleife inaktiviert wird. Wenn der Benutzer gesetzt ist (nächste Schleife), überprüfen Sie ihn, um das Plugin entsprechend zu setzen / zu deaktivieren. Funktionierte auch nicht.
Ich habe es nicht geschafft, die richtige Formel zu finden, also irre ich mich vielleicht irgendwo und es kann nicht gemacht werden. Jedes Mal wird das Plugin für alle Benutzer aktiviert oder deaktiviert. Es sieht so aus, als ob die erste Iteration zählt.
Gibt es eine Möglichkeit, ein Plugin für einen bestimmten Benutzer / eine bestimmte Gruppe zu inaktivieren?
quelle
require_once
Wenn die Option zum ersten Mal als aktive Plugins bezeichnet wird, werden sie geladen (nur a ). Selbst wenn das Plugin in späteren Aufrufen aus den Optionen herausgefiltert wird, ist die Plugin-Datei bereits erforderlich und es gibt keine Möglichkeit, sie zu entfernen. Also ja, das erste Mal zählt nur. Das Problem ist, dass die Benutzeranmeldung in WordPress erst nach dem Laden der Plugins erfolgt. Dies ist der Grund, warum Ihr Code fehlschlägt. Sie haben zwei Möglichkeiten: Benutzeranmeldung früher erzwingen; oder entfernen Sie die Funktionen, die das Plugin hinzufügt, dh ich denke, das Plugin fügt einige Hooks hinzu, warten Sie biswp_loaded
und entfernen Sie dann alle. Plugin ist aktiv, aber "stumm".Antworten:
Ich denke, die Antwort auf diese Aktion Plugin / Plugin über Thema deaktivieren ist gut für Grundkenntnisse darüber, wie Plugins aus Code deaktiviert werden.
Wenn Sie dieses Wissen an Ihre Bedürfnisse anpassen, haben wir Folgendes:
Grundsätzlich passiert dies:
Für die
media_manager
Benutzergruppemy_filter_the_plugins
deaktiviert das Plugin ( stillschweigend )advanced-page-manager
. Wir müssen dann das Plugin (wieder still ) für diejenigen reaktivieren , die nicht zurmedia_manager
Benutzergruppe gehören.quelle
Sie können das gesamte Plugin grundsätzlich nur basierend auf den Informationen deaktivieren, die Sie zum Zeitpunkt des "Bootens" von WordPress haben. Dies ist im Grunde die URL und die Cookies. Jede Prüfung, die komplexer ist als diese, muss wahrscheinlich warten, bis der Start abgeschlossen ist, um ausgeführt werden zu können. Zu diesem Zeitpunkt ist das Plugin bereits geladen und es ist zu spät, um es zu "deaktivieren".
quelle