我正在尝试对一个插件进行逆向工程: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/' ); 我的问题是。在这个wp-load.php文件中,代码到底需要什么?通过观察它,我所理解的是它加载了站点正常运行所需的关键核心wordpress文件(functions.php、wp-settings.php、wp-config.php等)。
插件运行的事实不就意味着wp-load.php已经加载了吗?
此外,这完全是对资源的浪费,因为它包含了如此多的文件,其中可能还包括其他文件,这就像是所需文件的无限循环,每个文件都在另一个文件中,这些文件被加载两次。(如果其他插件也使用这种方法,甚至更多)
那么它到底是做什么的呢?
附注:我通过Google-ing找到的就是如何正确地包含它(因为路径是可以改变的)-但这不是我的问题/问题。
发布于 2012-12-24 05:28:19
我的问题是..。在这个
wp-load.php文件中,代码到底需要什么?
所有的核心WordPress功能。这包括主题文件,活动插件的所有文件等。但以这种方式加载WordPress不会解析请求的URL,也不会运行WordPress查询(通过初始化WP对象,也不会运行WP_Query对象)。
通过查看它,我所理解的是它加载了站点正常运行所需的关键核心
文件(
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=sample或http://example.com/wp-admin/admin-ajax.php)。
查看第一个URL如何引用my-plugin插件目录中的特定文件,第二个URL如何通过添加特定的查询参数转到站点的主页,或者第三个示例,其中引用的文件是wp-admin目录中的admin-ajax.php -这是一个特殊的文件,这使得插件很容易发出AJAX请求(该文件还加载WordPress核心并触发一些操作挂钩)。
在第一个引用的情况下,如果插件想要使用一些WordPress功能(用于引用数据库、操作帖子等),它需要通过包含wp-load.php来加载WordPress核心文件。
这也完全是对资源的浪费,因为它包含了如此多的文件,可能还包括其他文件,这就像是所需文件的无限循环,每个文件都在另一个文件中,这些文件被加载两次。(如果其他插件也使用这种方法,甚至更多)
注意require_once(...中的_once部分--这告诉PHP,如果还没有包含文件,就只包含。因此不会发生冲突,PHP也不会占用太多内存。尽管-如果您所处的上下文中已经启动了WordPress,则不应该调用require函数。
因此,基本上,插件作者希望对您找到此代码的插件文件发出一些请求。由于作者希望在此文件中使用WordPress功能,因此他调用wp-load.php文件来加载核心函数。
我假设这样做是为了减少服务器上的负载,尽管在plugins_loaded操作钩子上运行了几个钩子,并在主页url中添加了一个自定义的$_GET参数,但结果应该仍然非常接近。
我个人更喜欢第二种选择,但正如我所说的,包括wp-load.php 将阻止WordPress运行一些复杂的东西(网址解析和数据库查询)。
如果你还有什么不太明白的地方--在这里发表评论,我会试着进一步解释。
发布于 2012-12-24 04:41:55
wp-load.php负责引导WordPress环境,使插件能够使用原生的WordPress核心功能。
现在,至于
不是已经加载了wp-load.php吗?
不用谢!
如果你直接访问一个插件文件,这并不意味着你拥有整个WordPress环境,除非你包含wp-load.php,否则你不能使用原生核心函数。
发布于 2012-12-22 23:48:13
据我所知,当需要使用数据库时,他们通常会在插件中包含wp-load,但这是一个糟糕的选择,因为它会带来很多问题。你可以在这里看到一些相关的文章:http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (如果这个链接被删除了,See that page here )
https://stackoverflow.com/questions/13860577
复制相似问题