2013-09-03 2 views
0

wpdb 쿼리에서 작업 중이며 그냥 실행되지 않습니다. 그리고 wpdb에 대한 오류보고가 어떤 이유로 든 오류를주지 않습니다.

그럼이 쿼리에서 분명한 실수를 발견 할 수 있습니까?

모든 _sell_media_attached_file 키 중 meta_value 키를 post_meta 테이블에 가져 오려고합니다.

먼저 wp_query을 실행하고, 게시 ID를 가져온 다음 wpdb 쿼리를 통해 각 게시 ID를 실행합니다.

 // run the loop 
     $loop = new WP_Query(array( 
      'post_type' => 'sell_media_item', 
      'collection' => $club, 
      'include_children' => false, 
      'year' => $year, 
      'monthnum' => $month, 
      'day' => $day, 
      'fields' => 'ids', 
     )); 


     if ($post_ids = $loop->get_posts()) { 

      $post_ids = implode(',', $post_ids); 

      //breaks here 
      $atts_ids = $wpdb->get_col("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = $post_ids AND meta_key = '_sell_media_attached_file' "); 
      echo('<b>query:</b> <pre>'); var_dump($atts_ids); 

을하지만 내가 말하는대로 var_dump 및 경우 아무것도 GET의 출력은 내가 오류를 얻을 $wpdb->print_error();을 추가

는 여기에 내가 함께 일하고 있어요거야.

답변

2

난 당신이 클래스의 기능에 액세스 할 수 global로 정의해야하고 또한 $post_ids이 여러 ID를 포함하는 경우 wpdb 클래스의 초기화가 당신의 워드 프레스의 wpdb 클래스에 액세스 보지 않았다 쉼표 대신 = 운영자

global $wpdb; 

     // run the loop 
     $loop = new WP_Query(array( 
      'post_type' => 'sell_media_item', 
      'collection' => $club, 
      'include_children' => false, 
      'year' => $year, 
      'monthnum' => $month, 
      'day' => $day, 
      'fields' => 'ids', 
      'nopaging'=>true 
     )); 


     if ($post_ids = $loop->get_posts()) { 

      $post_ids = implode(',', $post_ids); 

      //breaks here 
      $atts_ids = $wpdb->get_col("SELECT meta_value FROM $wpdb->postmeta WHERE post_id IN($post_ids) AND meta_key = '_sell_media_attached_file' "); 
      echo('<b>query:</b> <pre>'); var_dump($atts_ids); 
+0

놀라워요! 거의 완벽 해. 내가 볼 수있는 유일한 문제는 내 wp_query가 12 개 항목으로 제한된다는 것입니다. 왜 그런가? – lukeseager

+1

기본 제한이 있으므로 모든 게시물을 가져 오려면'nopaging "=> true' 배열의 추가 매개 변수를 전달해야합니다. 업데이트 된 답변보기 –

0

왜 그런 식으로 시도하지 않습니까?

if($loop->have_posts()){ 
    $ids = $loop->get_posts(); 
    foreach($ids as $id){ 
    $atts_ids[] = get_post_meta($id, '_sell_media_attached_file', true|false); //true if single value false if multiple values return as array 
    } 
}else{ 
    //Do something else 
} 

희망 하시겠습니까? 코드의 당신의 조각에서

+0

재미있는 아이디어의 IN() 절을 사용해야 분리, 다중 DB 쿼리는하지만 조금 느린하지 않을까요? 원래의 방법은 하나의 쿼리를 수행하고 모든 것을 얻습니다. – lukeseager

+0

내가 잘못하지 않으면 캐시해야합니다. 네, 그렇습니다 – iEmanuele

관련 문제