Ich benutze WordPress 3.0.5 und habe mit 3.1rc4 getestet. In der Haupt-PHP-Datei meines Plugins erhalte ich, wenn ich versuche, is_plugin_active aufzurufen Call to undefined function is_plugin_active()
. Ich kann add_action und add_filter aufrufen. Was sollte ich überprüfen / ändern, um dies zu beheben?
Dies geschieht innerhalb des Administrators auf der Plugins-Seite. Am Anfang meiner Haupt-Plugin-Datei habe ich, if (function_exists('is_plugin_active')) {
die immer false zurückgibt.
Ich kann die Funktionen aus meiner Haupt-Plugin-Datei auch nicht in anderen Plugins sehen (wenn das hilft).
function_exists('is_plugin_active')
falsch ist, wenn es von der Haupt-Plugin-Datei außerhalb einer Methode aufgerufen wird, aber wahr ist, wenn es innerhalb der Methode aufgerufen wird, die für dieactivated_plugin
Aktion aufgerufen wird .Antworten:
Das liegt daran, dass die Datei, in der is_plugin_active () definiert ist, -
wp-admin/includes/plugin.php
- erst im Admin geladen wird, nachdem Ihr Plugin geladen wurde.Daher können Sie es erst aufrufen, nachdem "admin_init" ausgelöst wurde:
quelle
Sie können is_plugin_active () auch in Vorlagen und auf Benutzerseiten aufrufen, was für verwandte Plugins nützlich sein kann (dh Sie benötigen das Plugin 'xyz', um mein neues Plugin zu betreiben). Sie müssen die Datei plugin.php manuell einbinden, wie in den is_plugin_active () -Dokumenten im Codex angegeben.
Hier ist ein Funktionsbeispiel, das ich in meinen Premium-Add-On-Paketen verwende, um sicherzustellen, dass das Free Base-Plug-In aktiv ist, bevor das Add-On-Objekt aufgerufen wird. Bestimmte Hooks und Filter müssen im Basis-Plugin verfügbar sein, sonst stürzt es ab.
Wenn Sie außerdem Probleme mit is_plugin_active () innerhalb einer aktiven Administratoranmeldung haben, liegt dies wahrscheinlich daran, dass Sie testen, bevor admin_init ausgelöst wird. admin_menu wird ausgelöst, bevor admin_init ausgeführt wird, und Tests in admin_menu haben mich zuvor "gebissen". Der Name "admin_init" erscheint mir kontraintuitiv, da admin_menu bereits ausgeführt wird. Ich stelle mir init als "erstes" vor ... vielleicht wäre admin_kinda_init () besser. :)
quelle
include_once(ABSPATH.'wp-admin/includes/plugin.php');
hat den Trick für mich getan. Vielen Dank!Eine schnelle und fehlerhafte Lösung wäre, die Funktion manuell zu duplizieren:
Es ist ziemlich kurz, daher sollte es nicht zu schwierig sein, es als Workaround in Ihren eigenen Code zu implementieren.
quelle
Simpel und einfach. Entnommen aus WP
und dann alle Instanzen von
Holen Sie sich die Funktionsprüfung. SO keine Fehler mehr.
quelle
requireonce
Sie die Funktion wahrscheinlich nicht überprüfen ...?Ich bevorzuge Tom Augers Antwort mit dem Definieren Ihrer eigenen is_plugin_active-Funktion, anstatt plugin.php einzuschließen. Die Verwendung des gleichen Funktionsnamens führte jedoch zum Absturz meines Administrationsbereichs. Die Verwendung eines anderen Funktionsnamens löste es:
quelle
Benutzt du
is_plugin_active
im Admin oder im Frontend? Ich bin mir ziemlich sicher, dass diesis_plugin_active
nur eine Admin-Funktion ist, die in wp-admin / includes / plugin.php zu finden ist.Verwendet Ihre Haupt-Plugin-Datei zusätzlich den Wordpress-Datei-Header ? Wird Ihr Plugin eingebunden, nachdem die obige Datei plugin.php geladen wurde?
quelle
So debuggen Sie aktive Plugins:
So suchen Sie nach einem bestimmten Plugin:
Die Aktion heißt "
active_plugins
" IIRC.quelle
Keine dieser Lösungen hat für mich funktioniert, aber dies hat:
Ich habe diese Lösung bei codebangers.com gefunden
quelle