无法访问全局变量?

时间:2013-04-09 作者:user2260090

在里面main.js, 我有一个脚本,它向script.php.

$.ajax({
    type: "POST",
    url:  "wp-content/themes/roots/script.php",
    data: registerdata,
    success: function(result)
    {
        alert(result);
    }
});
return false;
script.php 验证一些数据并将数据写入数据库。为此,我使用$wpdb WordPress对象($wpdb->insert()). 通常,WordPress提供一个全局变量,$wpdb, 这是已经设置好与WordPress数据库对话的类的实例化。但我的情况不是这样。我得到以下错误

致命错误:对非对象调用成员函数insert()

如果我这样做了

if(class_exists(\'wpdb\') == false){
    echo \'class wpdb doesnt exist\';
}
else{
    echo \'class wpdb exists\';
}
在中script.php, 它一直告诉我“wpdb类不存在”。如果我在function.php, wpdb类存在。但为什么呢?Script.phpfunction.php 在同一目录中。和$wpdb 由WordPress自动加载并设置为全局。所以我一直都有访问权限,不管我在哪个目录,对吧?!

realpath(ABSPATH . WPINC . \'/wp-db.php\')
。。。。也不起作用。中未定义常量script.php, 也我的错在哪里?register_globals = on 在里面php.ini. 未更改任何内容:/

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

直接回答你的问题,是的,$wpdb 是“自动加载并通过WordPress设置为全局”,但通过加载wp-content/themes/roots/script.php 您直接跳过WordPress启动过程并加载文件,就像WordPress不存在一样。这就是为什么普通WordPress对象和常量不可用的原因。它们还没有加载,因为WordPress还没有加载。如果您尝试无序加载任何其他模板或插件文件,则会遇到相同或类似的问题。

文件所在的目录不相关。文件不会仅仅因为位于特定目录中而“自动加载”,除了几个特定的例外template hierarchy files 例如,这只是因为WordPress是为了从特定位置查找和加载特定文件而编写的。

正如在对问题的评论中所述,您需要使用AJAX API. 这里有很多问题可以帮助解决这个问题,更不用说其他地方的教程和法典本身了。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴