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?
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".