在Wordpress functions.php文件中使用$ wpdb对象

时间:2012-09-14 17:47:18

标签: wordpress wpdb

我遇到的问题是无法在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变量,并且此函数在页面模板文件中运行良好。如果我的功能没有点缀在这个地方,并且在某种集中文件中,我会更喜欢它。

感谢您的期待! :)

2 个答案:

答案 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在函数的开头帮我和查询运行正常。 感谢