2012-09-14 4 views
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 변수를 글로벌화 했으므로이 함수는 페이지 템플릿 파일에서 잘 작동합니다. 내 기능이 장소 주변에 집중되어 있지 않은 경우, 그리고 일종의 중앙 집중식 파일에 깔려 있다면 더 좋아질 것입니다.

감사합니다. :)

답변

2

이미 글로벌 범위에있는 변수를 "Globalizing"하는 것은 아무 것도하지 않습니다. 사례 및 내용 :

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 객체를 만들기 위해 함수에 글로벌 선언을 이동해야 : 나는 functions.php에서 다음 쿼리를 실행중인

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

와우. 지금은 꽤 바보 같아요! 감사합니다 maiorano84. : D – mrbubbles

+0

언제든지. 전역 변수와 관련하여 좀 더 자세한 설명을 추가했습니다. 그들은 Wordpress에서 꽤 많이 사용되었지만, 표준적인 연습에 절대적으로 필요한 경우를 제외하고는 사용하지 말라고 조언합니다. 이 방법으로 문제가 해결되면 답장으로 표시하십시오. – maiorano84

0

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를 추가하면 나에게 도움이되고 쿼리가 제대로 실행됩니다. 감사합니다.

관련 문제