web-dev-qa-db-fra.com

Wordpress wp-load.php

J'essaie de désosser un plugin: http://wordpress.org/extend/plugins/wordpress-social-login/

Dans une partie de celle-ci, il y a cette ligne:
(J'ai du mal à comprendre le premier, les autres sont simplement là pour référence s'ils ont quelque chose à faire.)

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/' ); 

Ma question est la suivante: qu'est-ce qui est requis dans le fichier wp-load.php par le code? Tout ce que je comprends en le regardant, c’est que le logiciel charge des fichiers WordPress essentiels au bon fonctionnement du site (functions.php, wp-settings.php, wp-config.php, etc.).
Le fait que le plugin fonctionne déjà ne signifie-t-il pas que wp-load.php est chargé?
C’est aussi un gaspillage total de ressources, car il contient un grand nombre de fichiers pouvant contenir d’autres fichiers. Il s’agit donc d’une boucle infinie de fichiers obligatoires, chacun dans un autre, chargés deux fois. si d'autres plugins utilisent aussi ce type de méthode)

Alors, que fait-il exactement?

P.S; Tout ce que j'ai trouvé sur Google-ing, c'est COMMENT l'inclure correctement (puisque les chemins sont modifiables) - mais ce n'est pas mon problème/question.

11
Asaf

Ma question est la suivante: qu'est-ce qui est requis dans le fichier wp-load.php par le code?

Toutes les fonctionnalités de base de WordPress. Cela inclut les fichiers de thème, tous les fichiers des plugins actifs, etc.MAISle chargement de WordPress de cette manière ne analyse pas l’URL demandée et n’exécute pas la requête WordPress (en initialisant le WP, ni les objets WP_Query).

Tout ce que je comprends en le regardant, c’est que le logiciel charge des fichiers WordPress essentiels au bon fonctionnement du site (functions.php, wp-settings.php, wp-config.php, etc.).

Oui, vous avez bien compris 

Le fait que le plugin fonctionne déjà ne signifie-t-il pas que wp-load.php est chargé?

Si le code du plugin a été appelé par WordPress (par exemple pour afficher une page d'administrateur ou s'il a été inclus dans le fichier du plugin chargé initialement), alors oui, cela signifie que wp-load.php a déjà été chargé.

Parfois, cependant, les plug-ins dirigent les demandes vers des fichiers uniques (par exemple, http://example.com/wp-content/plugins/my-plugin/sample.php), plutôt que vers une page alimentée par WordPress (par exemple, http://example.com/?my_plugin_action=sample ou http://example.com/wp-admin/admin-ajax.php). 

Voyez comment la première URL fait référence à un fichier spécifique dans le répertoire du plugin my-plugin et la seconde à la page d'accueil du site avec un argument de requête spécifique ajouté, ou au troisième exemple, dans lequel le fichier référencé est admin-ajax.php dans le répertoire wp-admin - this est un fichier spécial, qui facilite la tâche de la requête AJAX par les plugins (ce fichier charge également le noyau WordPress et déclenche des points d’accroche).

Dans le cas de la première référence, si le plug-in souhaite utiliser certaines fonctionnalités de WordPress (pour référencer la base de données, manipuler des publications, etc.), il doit charger les fichiers de base de WordPress en incluant wp-load.php.

C'est aussi un gaspillage total de ressources, car il contient un très grand nombre de fichiers pouvant inclure d'autres fichiers. C'est comme une boucle infinie de fichiers requis, chacun dans un autre, qui sont chargés deux fois .. (voire plus si d'autres plugins l'utilisent) genre de méthode aussi)

Notez la partie _once dans require_once(... - ceci indique à PHP d'inclure le fichier seulement / s'il n'a pas déjà été inclus. Par conséquent, aucun conflit ne surviendra et PHP n'utilisera pas trop de mémoire. Bien que - si vous vous trouvez dans un contexte où WordPress a déjà été démarré, vous ne devez pas appeler la fonction require


Donc, fondamentalement, l'auteur du plug-in s'attend à ce que des requêtes soient envoyées au fichier de plug-in dans lequel vous avez trouvé ce code. Étant donné que l'auteur souhaite utiliser la fonctionnalité WordPress dans ce fichier, il appelle le fichier wp-load.php afin de charger les fonctions principales. 

Je suppose que cela est fait afin de réduire la charge sur le serveur, bien que, avec deux hooks exécutés sur le hook action plugins_loaded et un paramètre $_GET personnalisé ajouté à l'URL de la maison, le résultat devrait toujours être assez proche.

Personnellement, je préfère la deuxième option, mais comme je l’ai dit, notamment wp-load.php will empêchera WordPress d’exécuter des tâches complexes (analyse des URL et requêtes dans la base de données).

S'il y a encore quelque chose que vous ne comprenez pas très bien, postez un commentaire ici et j'essaierai de vous expliquer davantage.

27

D'après ce que j'ai lu, ils incluent généralement wp-load dans les plugins lorsque l'utilisation de la base de données est nécessaire, mais c'est un mauvais choix car cela soulève de nombreux problèmes. Vous pouvez voir quelques articles pertinents ici: http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (si ce lien est supprimé, Voir cette page ici )

4
tix3

wp-load.php est responsable de l’amorçage de l’environnement WordPress qui permet au plugin d’utiliser la fonction native de WordPress Core.

Maintenant que pour 

Le fait que le plugin fonctionne déjà ne signifie-t-il pas que wp-load.php est chargé?

Pas du tout! 

Si vous accédez directement à un fichier de plug-in, cela ne signifie pas que vous disposez de tout l'environnement WordPress et que vous ne pouvez pas utiliser les fonctions de base natives à moins d'inclure wp-load.php.

3
Bainternet

wp-load.php est un moyen de charger WP à partir de scripts externes, ce qui permet d'utiliser les fonctions WP entre autres fonctionnalités. 

Mais, comme vous le dites, cela ne devrait pas être nécessaire car c'est un plugin. Néanmoins, vous n'expliquez pas où avez-vous trouvé le code dans votre question, car wp-load.php est en effet nécessaire pour les pages frontales ou les scripts situés dans un répertoire différent du répertoire de la feuille de style, par exemple, même s'ils font partie d'un brancher.

Les pages de plug-in dans la zone d'administration ne doivent pas recharger WP car elles sont déjà chargées, mais les pages front-end doivent le charger. 

En bref, il y a plusieurs raisons d'inclure wp-load.php pour avoir accès à WP fonctions et variables. 

1
Felipe Alameda A

Cela inclut wp-load.php s'il n'est pas déjà chargé si le fichier se trouve n'importe où, quel que soit son niveau, dans le répertoire wp-content.

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

Probablement une double vérification.

require_once () signifie que s'il a déjà été chargé, il ne se chargera pas à nouveau.

1
Prathik Rajendran M