在里面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.php
和
function.php
在同一目录中。和
$wpdb
由WordPress自动加载并设置为全局。所以我一直都有访问权限,不管我在哪个目录,对吧?!
realpath(ABSPATH . WPINC . \'/wp-db.php\')
。。。。也不起作用。中未定义常量
script.php
, 也我的错在哪里?
register_globals = on
在里面
php.ini
. 未更改任何内容:/
最合适的回答,由SO网友:s_ha_dum 整理而成
直接回答你的问题,是的,$wpdb
是“自动加载并通过WordPress设置为全局”,但通过加载wp-content/themes/roots/script.php
您直接跳过WordPress启动过程并加载文件,就像WordPress不存在一样。这就是为什么普通WordPress对象和常量不可用的原因。它们还没有加载,因为WordPress还没有加载。如果您尝试无序加载任何其他模板或插件文件,则会遇到相同或类似的问题。
文件所在的目录不相关。文件不会仅仅因为位于特定目录中而“自动加载”,除了几个特定的例外template hierarchy files 例如,这只是因为WordPress是为了从特定位置查找和加载特定文件而编写的。
正如在对问题的评论中所述,您需要使用AJAX API. 这里有很多问题可以帮助解决这个问题,更不用说其他地方的教程和法典本身了。