我知道所有的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()
破坏了整件事。。。知道为什么吗?
提前感谢!
最合适的回答,由SO网友:Tomas Buteler 整理而成
事实证明这是一个可变范围的问题。我发现$wpdb
加载很好,但在生成它的函数之外是无法访问的,所以这让我找到了一个解决方案:includes()
我在问题中提到的是在函数内部完成的,具有局部(而非全局)范围。那么,我确信这对于所有WP全局变量都是一个问题,但是$wpdb是第一个生成致命错误的变量。
我没有提到我正在加载wp负载。php是一个函数,因为我不知道它的重要性。记住,孩子们:don\'t include wp-load.php, 但如果你这样做了,don\'t do it from inside a function.