我在PHP for Wordpress中创建一个应用程序,此时,我每两秒钟尝试通过AJAX从数据库中获取一个值,并且我已经创建了一个新文件应该被触发的功能。
<?php
global $wpdb;
function conta(){
global $wpdb, $table_name;
$count = $wpdb->get_var("SELECT contatore FROM $table_name WHERE email = '$mail'");
echo "$count";
}
conta()
?>
这里使用XMLHttpRequest对象每2秒调用一次此函数
setInterval(function () {
var url = <?php echo json_encode($con); ?>;
var valuereq = new XMLHttpRequest();
valuereq.open("GET", url, true);
valuereq.send();
valuereq.status;
valuereq.onreadystatechange = function () {
if (valuereq.readyState == 4 && valuereq.status == 200) {
var return_data = valuereq.responseText;
document.getElementById("conta").innerHTML = "Executed: " + return_data;
}
else document.getElementById("conta").innerHTML = "Error";
}
}, 2000);
Http请求正确执行,但我收到此错误:
Fatal error: Uncaught Error: Call to a member function get_var() on null in
C:\xampp\apps\wordpress\htdocs\wp-content\plugins\bittrex-
trader\admin\partials\conta.php:7 Stack trace: #0
C:\xampp\apps\wordpress\htdocs\wp-content\plugins\bittrex-
trader\admin\partials\conta.php(11): conta() #1 {main} thrown in
C:\xampp\apps\wordpress\htdocs\wp-content\plugins\bittrex-
trader\admin\partials\conta.php on line 7
程序无法找到全局变量$ wpdb,即使已声明。这只发生在AJAX请求中,因为如果我直接包含文件$ wpdb被找到并正常工作。 有原因吗? 提前谢谢。
答案 0 :(得分:0)
您的$mail
变量未在conta()
函数中设置,但您使用它执行查询。
使用此方法加载基本wordpress(仅加载wordpress核心),以便您可以使用$wpbd
:
<?php
// use this flag to load only wordpress core
define( 'SHORTINIT', true );
// find the wp-load.php file and require it
require( '/path/to/wp-load.php' );
// now you can use $wpdb
function conta($wpdb, $table_name, $mail)
{
$count = $wpdb->get_var("SELECT `contatore` FROM `".$table_name."` WHERE `email` = '".$mail."'");
echo "$count";
}
// call the function and pass the parameters
conta($wpdb, $table_name, $mail);
// close connection
$wpdb->close();
?>
更多关于worpdress core here的标志。