Mein Problem ist, wenn ich in der Haupt-Plugin-Datei eine PHP-Datei in etwa wie folgt einbinde:
include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
und auf dieser Datei habe ich einen Aufruf an eine WordPress-Funktion wie:
add_action('hook', 'callback');
und ich bekomme:
Schwerwiegender Fehler: Aufruf der undefinierten Funktion add_action ()
Nun, bevor Sie "Verwenden if(**function_exists**('add_action')){
" sagen, wenn ich das benutze, dann funktioniert es einfach nicht.
Die Fragen:
- Was wäre der richtige Weg, um das zu tun?
- Was sind die Unterschiede zwischen
include
,include_once
,require
und wenn ich Hexe verwenden tun?
plugin-development
functions
Bainternet
quelle
quelle
WP_PLUGIN_URL
in Ihrem Code oben :)Antworten:
Komme spät zu dieser Party, aber hier ist der "WordPress" Weg: benutze
plugin_dir_path( __FILE__ )
zB:Beachten Sie, dass die Funktion nicht den Rückschrägstrich für den Dateipfad.
quelle
__FILE__
eine Ausgabe relativ zu der aktuellen Dateiinclude
erfolgt, von der aus Sie sie aufrufen. Wenn Ihre Anweisung also aus einem Unterverzeichnis in Ihrer Plugin-Dateistruktur stammt, wird auch das Unterverzeichnis zurückgegeben.require_once(plugin_dir_path(__DIR__).'/myfile.inc');
Ich habe ein paar Plugins durchgesehen, die ich zuvor erstellt habe, um festzustellen, auf welche Weise ich zusätzliche Dateien in Plugins eingefügt habe, und habe festgestellt, dass es zwei Methoden gibt, die Sie verwenden können. Es gibt wahrscheinlich mehr.
Definiere dein Plugin-Verzeichnis
In Ihrem Plugin haben Sie die folgende Definition, um die aktuelle Position des Plugins zu definieren.
Beispielcode:
Nur ein direktes Einschließen oder Anfordern
Sie können einfach verwenden; include, include_once, require oder require_once in Ihrem Plugin-Ordner, indem Sie auf den Speicherort verweisen, wie im folgenden Beispielcode. Das folgende Beispiel basiert auf einer Datei in Ihrem Root-Plugin-Verzeichnis, einschließlich einer weiteren Datei aus einem Ordner in Ihrem Plugin-Ordner.
Beispielcode:
quelle
Am Ende verzichte ich auf die WordPress-Konstrukte für Includes und verwende Folgendes:
Ich denke nicht, dass es Ihr Problem tatsächlich lösen wird, was anscheinend ein Scope-Problem ist, aber es ist der Code, den ich verwende.
Was den Unterschied zwischen include und require betrifft:
include gibt eine Warnung aus, wenn die Datei nicht gefunden
wird. Require gibt einen schwerwiegenden Fehler aus, wenn die Datei nicht gefunden wird
include_once und require_once werden die Datei / den Code nicht erneut einschließen / erfordern, wenn sie bereits enthalten / erforderlich sind (beachten Sie, dass dies meines Erachtens nur für eine bestimmte Datei in einem bestimmten Verzeichnis gilt).
quelle
Zunächst einmal vielen Dank an alle, die geantwortet haben:
Mein Problem bestand darin, die enthaltenen Dateien mit vollständiger URL so aufzurufen, dass sie nicht über WordPress laufen. und das geschah, weil ich sie, wie auf der Frage angegeben, aus der Haupt-Plugin-Datei anrief. So endete der Fix mit:
Ich habe etwas über den WordPress-Support gelesen . und nochmals danke für die antwort!
quelle
Die obigen Informationen stammen aus der PHP-Dokumentation, die Sache ist, dass es keine richtige gibt. Sie hängen von der Notwendigkeit des Codes ab. Ich benötige () wichtige Dinge wie Funktionen, aber Themendateien wie die Fußzeile oder die von mir verwendete Schleife include_once oder include, weil ich mit der Warnung umgehen kann und dem Benutzer / Besucher sage, dass ein Fehler statt nur eines fatal_error aufgetreten ist
quelle
Hi @ בניית אתרים:
Beim Laden von WordPress wird die
add_action()
Funktion definiert , bevor versucht wird, Plugins zu laden. Die Tatsache, dass der Fehler angezeigt wird, zeigt an, dass Sie etwas Seltsames tun oder dass etwas mit Ihrer WordPress-Installation nicht stimmt.Wen bekommen Sie Ihr "Plugin" zu laden? Verwenden Sie ein
include*()
oderrequire*()
, um es zu laden, möglicherweise in Ihrerwp-config.php
Datei?quelle
oder
oder
Hinweis: Zum Einreihen von CSS- und JS-Dateien
admin_enqueue_scripts
in das Pluginplugin_dir_url( __FILE__ )
quelle
Wann immer Sie eine neue Datei in Ihrem Arbeitsverzeichnis erstellen, müssen Sie diese jedes Mal einfügen. Aber versuchen Sie eine Methode, um Ihr Directroy zu scannen und es automatisch anzuhängen, nicht nur die PHP-Dateien. Dies hilft, PHP-, Js- und CSS-Dateien auf beiden Seiten (Back-End, Front-End) korrekt einzubeziehen.
http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/
quelle