0

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変数をグローバル化しました。この関数は、ページテンプレートファイルでうまく機能します。私の関数がその場所の周りに点在しておらず、ある種の集中型ファイルにある場合は、それを好むでしょう。

期待してくれてありがとう!:)

4

2 に答える 2

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キーワードは、定義された変数のスコープを永続的にグローバルにするわけではありません。これは、関数内で変数を定義し、その値を関数外にある同じ名前の変数に設定する方法と考えてください。

グローバル宣言を関数に移動して、グローバルスコープの$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();
}
于 2012-09-14T17:55:17.717 に答える
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という行を追加した後、私は助けになり、クエリは正常に実行されています。ありがとう

于 2013-09-16T12:44:38.223 に答える