it-swarm.com.de

Wordpress wp-load.php

Ich versuche, ein Plugin rückzuentwickeln: http://wordpress.org/extend/plugins/wordpress-social-login/

In einem Teil davon gibt es folgende Zeile:
(Es fällt mir schwer, den ersten zu verstehen, der Rest dient nur als Referenz, wenn er etwas zu tun hat.)

require_once( dirname( dirname( dirname( dirname( __FILE__ )))) . '/wp-load.php' );

define( 'WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL', plugins_url() . '/' . basename( dirname( __FILE__ ) ) ); 
define( 'WORDPRESS_SOCIAL_LOGIN_HYBRIDAUTH_ENDPOINT_URL', WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL . '/hybridauth/' ); 

Meine Frage ist ... was genau ist in dieser wp-load.php-Datei, die vom Code benötigt wird? Alles was ich verstehe ist, dass es wichtige Kern-Wordpress-Dateien lädt, damit die Website korrekt ausgeführt wird (functions.php, wp-settings.php, wp-config.php etc ...).
Bedeutet das nicht, dass das Plugin bereits läuft, wp-load.php geladen ist?
Es ist auch eine komplette Verschwendung von Ressourcen, da es so viele Dateien enthält, die auch andere Dateien enthalten können, und es ist wie eine Endlosschleife erforderlicher Dateien, die jeweils in zwei anderen Dateien geladen werden (oder sogar mehr) wenn auch andere Plugins diese Methode verwenden)

Also was genau macht es?

PS; Alles, was ich von Google-ing gefunden habe, ist, wie man es richtig einfügt (da Pfade veränderbar sind) - aber das ist nicht mein Problem/Frage.

11
Asaf

Meine Frage ist ... was genau ist in dieser wp-load.php-Datei, die vom Code benötigt wird?

Alle Kernfunktionen von WordPress. Dazu gehören die Designdateien, alle Dateien der aktiven Plugins usw., ABERBeim Laden von WordPress wird die angeforderte URL nicht analysiert und die WordPress-Abfrage wird nicht ausgeführt (durch Initialisieren von WP-Objekt noch die WP_Query-Objekte).

Alles was ich verstehe ist, dass es wichtige Kern-Wordpress-Dateien lädt, damit die Website korrekt ausgeführt wird (functions.php, wp-settings.php, wp-config.php etc ...).

Ja, du hast es richtig verstanden. 

Bedeutet das nicht, dass das Plugin bereits läuft, dass wp-load.php geladen ist?

Wenn der Plugin-Code von WordPress aufgerufen wurde (z. B. um eine Administrationsseite anzuzeigen oder in der ursprünglich geladenen Plugin-Datei enthalten war), dann bedeutet dies, dass wp-load.php bereits geladen wurde.

Manchmal leiten Plugins jedoch Anforderungen an einzelne Dateien (zum Beispiel http://example.com/wp-content/plugins/my-plugin/sample.php) und nicht an eine von WordPress betriebene Seite (zum Beispiel http://example.com/?my_plugin_action=sample oder http://example.com/wp-admin/admin-ajax.php). 

Sehen Sie sich an, wie die erste URL auf eine bestimmte Datei im my-plugin-Plugin-Verzeichnis verweist, und die zweite URL wird mit einem hinzugefügten Abfrageargument zur Startseite der Website geleitet. Im dritten Beispiel befindet sich die referenzierte Datei admin-ajax.php im Verzeichnis wp-admin - hier ist eine spezielle Datei, die es Plugins leicht macht, AJAX -Anfragen zu stellen (diese Datei lädt auch den WordPress-Kern und löst einige Action-Hooks aus).

Wenn das Plugin im Fall der ersten Referenz einige WordPress-Funktionen verwenden möchte (zum Verweisen auf die Datenbank, zum Bearbeiten von Beiträgen usw.), muss es die WordPress-Kerndateien laden, indem wp-load.php eingeschlossen wird.

Es ist auch eine komplette Verschwendung von Ressourcen, da es so viele Dateien enthält, die auch andere Dateien enthalten können, und es ist wie eine Endlosschleife erforderlicher Dateien, die jeweils zweimal geladen werden (oder sogar mehr, wenn andere Plugins dies verwenden.) Art von Methode auch)

Beachten Sie den _once-Teil in require_once(... - dies weist PHP an, die Datei only einzuschließen, falls diese noch nicht enthalten ist. Daher treten keine Konflikte auf und es wird nicht zu viel Speicherplatz von PHP verwendet. Obwohl - wenn Sie sich in einem Kontext befinden, in dem WordPress bereits gestartet wurde, sollten Sie die Funktion require nicht aufrufen. 


Grundsätzlich erwartet der Autor des Plugins, dass einige Anforderungen an die Plugin-Datei gestellt werden, in der Sie diesen Code gefunden haben. Da der Autor die WordPress-Funktionalität in dieser Datei verwenden möchte, ruft er die wp-load.php-Datei auf, um die Kernfunktionen zu laden. 

Ich gehe davon aus, dass dies zur Verringerung der Serverlast erfolgt, obwohl mit ein paar Hooks, die auf dem Aktionscode plugins_loaded ausgeführt werden, und einem benutzerdefinierten $_GET-Parameter, der der Home-URL hinzugefügt wird, das Ergebnis immer noch recht nahe sein sollte.

Ich persönlich bevorzuge die zweite Option, aber wie gesagt, mit wp-load.php wird wird verhindert, dass WordPress komplexe Vorgänge ausführt (URL-Analyse und Datenbankabfragen).

Wenn es noch etwas gibt, das Sie nicht ganz verstehen, schreiben Sie hier einen Kommentar und ich werde versuchen, das weiter zu erklären.

27

Was ich gelesen habe, enthält wp-load normalerweise in den Plugins, wenn eine Datenbanknutzung erforderlich ist. Dies ist jedoch eine schlechte Wahl, da dies eine Menge Probleme aufwirft. Sie können einige relevante Artikel hier sehen: http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (Wenn dieser Link jemals gelöscht wird, Siehe diese Seite hier )

4
tix3

wp-load.php ist für das Bootstrapping der WordPress-Umgebung verantwortlich, wodurch das Plugin die native WordPress Core-Funktion verwenden kann.

Jetzt wie für 

Bedeutet das nicht, dass das Plugin bereits läuft, dass wp-load.php geladen ist?

Überhaupt nicht! 

Wenn Sie direkt auf eine Plugin-Datei zugreifen, bedeutet dies nicht, dass Sie über die gesamte WordPress-Umgebung verfügen und die nativen Kernfunktionen nicht verwenden können, es sei denn, Sie enthalten wp-load.php.

3
Bainternet

wp-load.php ist eine Möglichkeit, WP aus externen Skripten zu laden, wodurch unter anderem die Funktionen von WP verwendet werden können. 

Aber wie Sie sagen, sollte dies nicht notwendig sein, da es sich um ein Plugin handelt. Sie erklären jedoch nicht, wo Sie den Code in Ihrer Frage gefunden haben, da wp-load.php tatsächlich für Front-End-Seiten oder -Scripts benötigt wird, die sich in einem anderen Verzeichnis als dem Stylesheet-Verzeichnis befinden, selbst wenn sie Teil eines sind Plugin.

Plug-In-Seiten im Admin-Bereich müssen WP nicht neu laden, da sie bereits geladen sind. Front-End-Seiten müssen jedoch geladen werden. 

Kurz gesagt, es gibt mehrere Gründe, wp-load.php für den Zugriff auf WP - Funktionen und -Variablen zu verwenden. 

1

Dies schließt wp-load.php mit ein, wenn es nicht bereits geladen ist, wenn sich die Datei unabhängig von der Stufe irgendwo im Verzeichnis wp-content befindet.

if(!defined(ABSPATH)){
    $pagePath = explode('/wp-content/', dirname(__FILE__));
    include_once(str_replace('wp-content/' , '', $pagePath[0] . '/wp-load.php'));
}
1
user3916019

Vermutlich ein Doppelcheck.

requires_once () bedeutet, dass es nicht erneut geladen wird, wenn es bereits geladen wurde.

1