在另一个Include()之后包含‘wp-load.php’会生成错误

时间:2012-07-23 作者:Tomas Buteler

我知道所有的downsides 尝试包括wp负载。php,但请记住:)

我正在尝试创建自己的类似ajax的管理功能,以控制是否加载默认WordPress环境,是否使用SHORTINIT 常量定义为true,并根据通过AJAX访问的特定函数的要求,对插件的每个模块进行细粒度控制。我能想到的唯一方法是通过自定义文件执行AJAX,而不是管理AJAX。php,然后包括wp加载。需要时使用php。

事实上,我已经成功地使用了几个月了。我已经给文件命名了bootstrap.php, 它位于我插件的“includes”目录中。要求wp-load.php 从内部bootstrap.php 将加载可湿性粉剂刚刚好。

今天我决定我需要更多的控制,所以我试图推迟wp-load.php 当我加载了包含AJAX函数的文件时。这些文件在中调用bootstrap.php 具有include(), 但需要wp-load.php 在这些文件中,将生成以下错误:

Notice: Undefined variable: wpdb in .../wp-includes/ms-settings.php on line 126
Fatal error: Call to a member function set_prefix() on a non-object in .../wp-includes/ms-settings.php on line 126 
问题发生在WP的负载范围内,因此require() 呼叫点到wp-load.php 文件从URL请求的文件调用它可以很好地工作,但在include() 破坏了整件事。。。知道为什么吗?

提前感谢!

2 个回复
最合适的回答,由SO网友:Tomas Buteler 整理而成

事实证明这是一个可变范围的问题。我发现$wpdb 加载很好,但在生成它的函数之外是无法访问的,所以这让我找到了一个解决方案:includes() 我在问题中提到的是在函数内部完成的,具有局部(而非全局)范围。那么,我确信这对于所有WP全局变量都是一个问题,但是$wpdb是第一个生成致命错误的变量。

我没有提到我正在加载wp负载。php是一个函数,因为我不知道它的重要性。记住,孩子们:don\'t include wp-load.php, 但如果你这样做了,don\'t do it from inside a function.

SO网友:Christian

另一种修复方法:

function load_wp(){
    global $wpdb;
    include_once(\'wp-load.php\');
}

结束

相关推荐

将AJAX选择模块集成到WordPress页面的任何插件或脚本

我正在使用WordPress创建一个网络托管网站。它需要一个自定义功能选择模块来添加或删除磁盘空间等。在里面this particular website 我喜欢的是,有一个自定义的“实例选择”模块,可以添加ram空间等。该站点由WordPress提供电源。是否有任何插件或脚本可以获得相同的功能?这不是行动现场