2014-04-03 3 views
0

글 머리 기호를 함수의 query-> set에 전달하려고하고 함수가 게시물을 반환합니다.ID를 함수의 pre_get_posts 쿼리에 전달하십시오.

add_action('pre_get_posts', 'query_booked_posts'); 

function query_booked_posts($query) { 
    if ($condition) { //the condition 

    if (is_home() && $query->is_main_query()) 
    $results = $wpdb->get_col($wpdb->prepare("SELECT booked_id FROM $wpdb->userbooking WHERE userid = %d",$current_user_id)); 

    foreach($results as $result){ 
    $results_separated = $result.','; 
    } 
    $query->set ('post__in', array($results_separated)); // pass results (post ids) to post__in 

    return $query; 
    } 

}  

이 후 함수는 아무 것도 반환하지 않습니다.

$query->set ('post__in', array(45,121));을 입력하면 쿼리가 id 45 및 id 121의 게시물을 반환하므로 쿼리가 올바르게 작동합니다.

하지만 $results_separated은 45,121,132와 같은 게시 ID를 쿼리에 전달하고 $query->set ('post__in', array($results_separated));은 올바르게 작동하게 만들려고합니다. 어떻게해야합니까?

pre_get_posts reference

답변

0

난 당신이 실제로 PHP 문제가있는 것 같아요. array($results_separated)을 수행하면 기본적으로 다음과 같은 문자열로 배열을 만듭니다. "12,114,56,". 이렇게하면 PHP는 다음과 같은 배열을 생성합니다 :

array(
    0 => "12,114,56," 
) 

분명히 WordPress에서 해당 ID를 가진 게시물을 찾을 수 없습니다! 당신이 원하는 것은 실제로이 같은 배열 :

array(
    0 => "12", 
    1 => "114", 
    2 => "56" 
) 

그리고 실제로 어떤 get_col() 반환, 그래서 당신은 단지 set() 기능에 $results 전달해야합니다

$query->set ('post__in', $results); 

편집 : 실제로는 $wpdb->get_col(...)으로 전화 할 때 문제가 있다는 것을 깨달았습니다.을 방해하기 때문입니다.당신은 나중에 실행합니다 ... 그 변수는 아마도 오버 라이딩되는 다른 전역 변수를 사용하기 때문에 어떤 결과도 얻지 못합니다 ...

+0

미코노미 씨, 솔루션을 사용해 보았지만 아무 것도 반환하지 않았습니다. ( – Jason

+0

@Jason, foreach 바로 전에'var_dump ($ results) '를 해보고 실제로 결과를 얻고 있는지 확인하십시오. 귀하의 쿼리 ... – MikO

+0

var_dump ($ 결과) 후 : array (3) {[0] => string (3) "121"[1] => string (2) "89"[2] => 문자열 (2) "69"} – Jason

0

$ results_separated에 대한 추가 배열을 제외하고, 내 경우에는 내가 내 함수의 상단에

if (!$query->is_main_query()) { 
    return $query; 
} 

을 적용했다 (그것의, 그렇지 않으면, 내부 쿼리를 여러 번 실행하지 제대로 될 것이다 발견했다. 답변을 통해이 문제를 파악하는 데 도움이되었습니다.

관련 문제