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

oknwwptz  于 5个月前  发布在  WordPress
关注(0)|答案(2)|浏览(73)

我有一个问题,无法调用WordPress functions.php文件中$wpdb对象上的get_results()函数。
Exact error:Call to a member function get_results()on a non-object in [...]
这是我的职责

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变量,这个函数在页面模板文件中工作得很好。我只是希望我的函数不要分散在某个地方,而是在某种集中的文件中。
谢谢期待!:)

zujrkrfu

zujrkrfu1#

“全局化”一个已经在全局作用域中的变量没有任何作用。

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关键字不会永久地使定义的变量在作用域中成为全局变量。可以将其视为在函数中定义变量并将其值设置为函数外部具有相同名称的变量的一种方式。
您需要将全局声明移动到函数中,以使Global范围内的$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();
}

xytpbqjk

xytpbqjk2#

我在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在函数的开始帮助我和查询运行良好。谢谢

相关问题