我遇到的问题是无法在Wordpress functions.php文件中的$ wpdb对象上调用get_results()函数。
确切错误:在[...]
中的非对象上调用成员函数get_results()这是我的功能;
global $wpdb;
function query_students($year){
$wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}usermeta WHERE meta_key ='foobar' AND meta_value = '{$year}'"
)
);
$wpdb->flush();
}
正如您所看到的,我已经全局化了$ wpdb变量,并且此函数在页面模板文件中运行良好。如果我的功能没有点缀在这个地方,并且在某种集中文件中,我会更喜欢它。
感谢您的期待! :)
答案 0 :(得分:3)
“全球化”已经在全局范围内的变量什么都不做。案例和要点:
global $a; //does nothing
$a = 'foo';
global $a; //does nothing
foo();
echo $a; //'foo'
bar();
echo $a; //'bar'
function foo()
{
$a = 'bar';
}
function bar()
{
global $a;
$a = 'bar';
}
global关键字不会永久地使定义的变量在范围内变为全局变量。可以将其视为在函数中定义变量的方法,并将其值设置为具有相同名称的变量在函数外部的任何值。
您需要将全局声明INTO移动到函数中,以使全局作用域中的$ wpdb对象在函数范围内可用:
function query_students($year){
global $wpdb;
$wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}usermeta WHERE meta_key ='foobar' AND meta_value = '{$year}'"
));
$wpdb->flush();
}
答案 1 :(得分:0)
我在functions.php中运行了以下查询
SELECT `id`, `user`, `width`, `type`, `source`, `link`, `expire`, `impressions`, `clicks` FROM adds WHERE `width`=728 and `impressions` < (SELECT max(`impressions`) FROM adds WHERE `width`=728 ) or `width`=728 and `clicks` < (SELECT max(`clicks`) FROM adds WHERE `width`=728 ) ORDER BY RAND() LIMIT 3
它没有工作但是在添加线之后 全局$ wpdb在函数的开头帮我和查询运行正常。 感谢