首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wordpress wp-load.php

Wordpress wp-load.php
EN

Stack Overflow用户
提问于 2012-12-13 21:11:41
回答 6查看 58.2K关注 0票数 17

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

在其中的一部分,有这样一句话:

(我很难理解第一个问题,其余的只是为了参考,如果他们有什么要做的话。)

代码语言:javascript
复制
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.phpwp-settings.phpwp-config.php等)。

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

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

那么它到底是做什么的呢?

附注:我通过Google-ing找到的就是如何正确地包含它(因为路径是可以改变的)-但这不是我的问题/问题。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-12-24 05:28:19

我的问题是..。在这个wp-load.php文件中,代码到底需要什么?

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

通过查看它,我所理解的是它加载了站点正常运行所需的关键核心

文件(functions.phpwp-settings.phpwp-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如何通过添加特定的查询参数转到站点的主页,或者第三个示例,其中引用的文件是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运行一些复杂的东西(网址解析和数据库查询)。

如果你还有什么不太明白的地方--在这里发表评论,我会试着进一步解释。

票数 37
EN

Stack Overflow用户

发布于 2012-12-24 04:41:55

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

现在,至于

不是已经加载了wp-load.php吗?

不用谢!

如果你直接访问一个插件文件,这并不意味着你拥有整个WordPress环境,除非你包含wp-load.php,否则你不能使用原生核心函数。

票数 5
EN

Stack Overflow用户

发布于 2012-12-22 23:48:13

据我所知,当需要使用数据库时,他们通常会在插件中包含wp-load,但这是一个糟糕的选择,因为它会带来很多问题。你可以在这里看到一些相关的文章:http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (如果这个链接被删除了,See that page here )

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13860577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档