Wordpress wp-load.php

Asa*_*saf 13 php wordpress plugins wordpress-plugin

我正在尝试对插件进行反向工程:http://wordpress.org/extend/plugins/wordpress-social-login/

在其中的一部分,有这样一句话:(
我很难理解第一个,其余的只是参考,如果他们有事情要做.)

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/' ); 
Run Code Online (Sandbox Code Playgroud)

我的问题是......这个wp-load.php文件究竟是什么,代码需要它?通过观察它,所有我的理解是,它加载的网站的关键核心WordPress的文件被运行正常(functions.php,wp-settings.php,wp-config.php等...),
那岂不是插件运行已经意味着事实wp-load.php被加载?
此外,它完全浪费资源,因为它包含许多文件,其中可能包含其他文件,它就像无限循环的所需文件,每个文件都在另一个文件中,它们被加载两次..(如果其他插件使用此文件,甚至更多也是一种方法)

那到底是做什么的呢?

PS; 我通过Google-ing发现的所有内容都是如何正确地包含它(因为路径可以改变) - 但这不是我的问题/问题.

Nik*_*lov 30

我的问题是......这个wp-load.php文件究竟是什么,代码需要它?

所有核心WordPress功能.这包括主题文件,活动插件的所有文件等.但是以这种方式加载WordPress不解析请求的URL并且不运行WordPress查询(通过初始化WP对象,也不是WP_Query对象).

通过观察它,所有我的理解是,它加载关键核心WordPress的文件为网站运行正常(functions.php,wp-settings.php,wp-config.php等...)

是的,你已经理解正确了.

插件运行的事实不是意味着加载了wp-load.php吗?

如果插件代码是由WordPress调用的(例如,为了显示管理页面,或者它被初始加载的插件文件包含) - 那么是的,这意味着wp-load.php已经加载了.

有时候,插件会将请求指向单个文件(例如http://example.com/wp-content/plugins/my-plugin/sample.php),而不是指向某个WordPress驱动的页面(例如http://example.com/?my_plugin_action=samplehttp://example.com/wp-admin/admin-ajax.php).

查看第一个URL如何引用my-plugin插件目录中的特定文件,第二个URL如何转到添加了特定查询参数的站点的主页,或者第三个示例,其中引用的文件admin-ajax.php位于wp-admin目录中 - 这是一个特殊的文件,这使插件很容易发出AJAX请求(此文件也加载WordPress核心并触发一些动作挂钩).

在第一个引用的情况下,如果插件想要使用一些WordPress功能(用于引用数据库,操作帖子等),它需要通过包含加载WordPress核心文件wp-load.php.

此外,它完全浪费资源,因为它包含许多文件,其中可能包含其他文件,它就像无限循环的所需文件,每个文件都在另一个文件中,它们被加载两次..(如果其他插件使用此文件,甚至更多也是一种方法)

请注意该_once部分require_once(...- 这告诉PHP 只有在尚未包含该文件时才包含该文件.因此,不会发生冲突,PHP不会使用太多内存.虽然 - 如果您处于已启动WordPress的环境中,则不应调用该require函数.


因此,基本上插件作者希望对您在其中找到此代码的插件文件进行一些请求.由于作者想在此文件中使用WordPress功能,因此他调用该wp-load.php文件以加载核心功能.

我假设,这样做是为了减少服务器上的负载,虽然有一些钩子在plugins_loaded动作挂钩上运行并且自定义$_GET参数添加到主URL,但结果应该非常接近.

我个人更喜欢第二个选项,但就像我说的,包括wp-load.php 阻止WordPress运行一些复杂的东西(URL解析和数据库查询/ ies).

如果还有什么东西,那你就不太了解 - 在这里发表评论,我会尝试进一步解释.


Bai*_*net 5

wp-load.php 负责引导 WordPress 环境,使插件能够使用本机 WordPress 核心功能。

现在至于

插件运行的事实是否意味着 wp-load.php 已加载?

一点也不!

如果您直接访问插件文件,并不意味着您拥有整个 WordPress 环境并且您无法使用本机核心功能,除非您包含wp-load.php.