it-swarm.com.de

Wie man einbindet PHP Dateien in Plugins auf die richtige Weise

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 ()

Bevor Sie jetzt "use if(**function_exists**('add_action')){" sagen, wenn ich das benutze, funktioniert es einfach nicht.

Die Fragen:

  • Was wäre der richtige Weg, um das zu tun?
  • Was ist der Unterschied zwischen include, include_once, require und wann verwende ich witch?
57
Bainternet

Zunächst einmal vielen Dank an alle, die geantwortet haben:

Mein Problem war, die enthaltenen Dateien mit voller 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:

include_once('/ipn/Paypal-ipn.php');

ich las über die WordPress-Unterstützung . und nochmals danke für die antwort!

5
Bainternet

Komme spät zu dieser Party, aber hier ist der "WordPress" Weg: benutze plugin_dir_path( __FILE__ ) , z.

<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/Paypal-ipn.php');
?>

Beachten Sie, dass die Funktion does den abschließenden Schrägstrich für den Dateipfad zurückgibt.

83
Chip Bennett

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 mir ist aufgefallen, 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:

define( 'PLUGIN_DIR', dirname(__FILE__).'/' );  

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 in einem Ordner in Ihrem Plugin-Ordner.

Beispielcode:

include "classes/plugin-core.php";
9

Am Ende verzichte ich auf die WordPress-Konstrukte für Includes und verwende Folgendes:

require_once(dirname(__FILE__) . '/filename.php);

Ich glaube nicht, dass es Ihr Problem lösen wird, das ein Problem mit dem Gültigkeitsbereich zu sein scheint, 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 wird einen fatalen Fehler auslösen 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, soweit ich das beurteilen kann, nur für eine bestimmte Datei in einem bestimmten Verzeichnis gilt).

5
mtekk

Include

Die include () -Anweisung schließt die angegebene Datei ein und wertet sie aus.

Einmal einschließen

Die include_once () -Anweisung schließt die angegebene Datei während der Ausführung des Skripts ein und wertet sie aus. Dies ist ein ähnliches Verhalten wie die include () - Anweisung. Der einzige Unterschied besteht darin, dass der Code aus einer Datei, der bereits enthalten ist, nicht erneut enthalten ist. Wie der Name schon sagt, wird es nur einmal enthalten sein.

Benötigen

require () und include () sind in jeder Hinsicht identisch, außer wie sie mit Fehlern umgehen. Beide erzeugen eine Warnung, erfordern jedoch, dass () zu einem schwerwiegenden Fehler führt. Mit anderen Worten, zögern Sie nicht, require () zu verwenden, wenn Sie möchten, dass eine fehlende Datei die Verarbeitung der Seite anhält.

Einmalig benötigt

Die require_once () -Anweisung schließt die angegebene Datei während der Ausführung des Skripts ein und wertet sie aus. Dies ist ein ähnliches Verhalten wie die require () - Anweisung. Der einzige Unterschied besteht darin, dass der Code aus einer Datei, der bereits enthalten ist, nicht erneut enthalten ist.

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 () für wichtige Dinge wie Funktionen, aber für Themendateien wie Fußzeile oder Schleife Ich verwende include_once oder include, weil ich mit der Warnung umgehen kann und dem Benutzer/Besucher sage, dass ein Fehler statt eines fatal_error aufgetreten ist

3
Webord

Hi @ בניית אתרים:

Wenn WordPress geladen wird, definiert es die Funktion add_action() before es versucht, Plugins zu laden. Die Tatsache, dass Sie den Fehler erhalten, sagt mir, dass Sie etwas Seltsames tun oder dass etwas mit Ihrer WordPress-Installation nicht stimmt.

Wen bekommen Sie Ihr "Plugin" zu laden? Verwenden Sie eine include*() oder require*() zum Laden, möglicherweise in Ihrer wp-config.php-Datei?

1
MikeSchinkel
include( plugin_dir_path( __FILE__ ) . 'ipn/Paypal-ipn.php');

oder

define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) );
include( PLUGIN_ROOT_DIR . 'ipn/Paypal-ipn.php');

oder

$plugin_dir_path = plugin_dir_path( __FILE__ );
include( $plugin_dir_path . 'ipn/Paypal-ipn.php');

Hinweis: Um CSS- und JS-Dateien in das Plug-in einzuordnen, admin_enqueue_scripts benutzen Sie plugin_dir_url( __FILE__ )

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');
1
Aamer Shahzad

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 dabei, PHP-, Js- und CSS-Dateien auf beiden Seiten (Backend, Frontend) korrekt einzubeziehen.

http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/

0
varadha