2013-03-06 3 views
3

WP_Query 개체를 사용하여 새 쿼리 함수를 작성하려고합니다.

나는 새 템플릿 파일을 생성하고 다음 넣어 :

 $query_args = array(
      'post_type' => 'page', 
      'post_parent=41', 
     ); 

     // The Featured Posts query. 
     $results = new WP_Query($query_args); 

하지만 내가 사용하는 어떤 인수, 쿼리를 변경하지 않습니다. 쿼리가 이미 초기화되어 있고 새로운 WP_Query을 만들면 기존 쿼리에 아무런 영향을주지 않는 것처럼 보입니다.

내 코드가 get_header() 인 유일한 wordpress 함수는 WP_Query 또는 query_posts에 대한 호출을 포함하지 않습니다.

echo $GLOBALS['wp_query']->request; 

실제 SQL 쿼리는 다음과 같습니다 : 내 $query_args을 변경하면이 쿼리가 변경되지 않습니다

SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND (wp_posts.ID = '14') AND wp_posts.post_type = 'page' ORDER BY wp_posts.post_date DESC 

나는 실제 SQL 쿼리가 무엇인지 알아 보려면 다음 줄을 넣어.

글로벌 변수 $wp_query이 초기화되면 내 자신의 쿼리를 사용하려면 어떻게해야합니까?

답변

15

WP_Query 개체를 만들고 $results에 저장하고 있습니다. 쿼리 결과는 $GLOBALS['wp_query']이 아닌 곳입니다. 물론 $wp_query을 덮어 쓰지 않습니다. 그것들은 다른 것들입니다. 대신 var_dump($results)을 시도하십시오.

$wp_query = new WP_Query($query_args);과 같이 새 WP_Query 개체를 만들어서 $wp_query을 덮어 쓸 수 있습니다. 그러나 그것은 효율적이지 않습니다. 하나만 필요할 때 두 개의 쿼리를 실행합니다. 더 좋은 방법은 pre_get_posts에 연결하는 것입니다. 예 :

function alter_query_so_15250127($qry) { 
    if ($qry->is_main_query() && is_page('featured-posts-page')) { 
    $qry->set('post_type','page'); 
    $qry->set('post_parent',41); 
    } 
} 
add_action('pre_get_posts','alter_query_so_15250127'); 

if 조건부가 매우 중요합니다. 이 줄을 사용하여 필터가 발사 할 페이지에서만 필터가 작동하는지 확인해야합니다. 귀하의 질문에 정확한 조건을 제시하기에 충분한 세부 사항이 없습니다. 이 응답을 완료하려면 http://codex.wordpress.org/Function_Reference/query_posts enter image description here

+0

에 게시 된 – Rufein

7

는 아래 그림에서보세요. 또한 어떤 값을 덮어 써서 쿼리를 실행하기 위해 null로 설정해야했습니다 :`$ qry-> set ('p', null); $ qry-> set ('page_id', null); `
관련 문제