wp_query 결과에서 게시물 데이터 배열을 얻는 방법은 무엇입니까?


35

WP_Query 메소드로 쿼리를 실행할 때 객체가 있습니다. 나는 물건을 표시하기 위해 루프를 수행 할 수 있음을 이해합니다. 그러나 내 목표는 아무것도 표시하지 않는 것입니다. 대신 "foreach ..."와 같은 작업을 수행하여 게시물 데이터를 얻고 싶습니다. 반복하고 데이터를 얻을 수있는 포스트 데이터 배열을 어떻게 얻을 수 있습니까?


2
게시물 데이터에 직접 액세스하는 것과 템플릿 태그를 사용하는 것 사이에서 명심해야 할 중요한 차이점은 필터가 데이터에 적용되지 않고 일부 기능이 중단 될 수 있다는 것입니다.
Milo

답변:


73

WordPress 코덱 에서 WP_Query함수 참조를 읽어야합니다 . 거기에 많은 예제가 있습니다. 를 사용하여 결과 집합을 반복하지 않으려면 in 속성 while을 사용하여 쿼리에서 반환 된 모든 게시물을 가져올 수 WP_Query있습니다 posts.

예를 들어

$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;

foreach($posts as $post) {
    // Do your stuff, e.g.
    // echo $post->post_name;
}

1
그러나 링크하는 예제 중 어느 것도 게시물을 처리하는 방법을 보여주지 않습니다. 따라서 문서에 포함되어 있지 않은 것이 유감입니다. 다른 팁 : 고유 한 게시물에서 일치하는 경우 'posts_per_page'=>1args에서 이와 같은 기능을 사용할 수 있습니다 . function wp_queryfirstpost($args) { $q=new WP_Query($args); $pp=$q->get_posts(); $firstpost=false;if ($pp) $firstpost=$pp[0]; wp_reset_postdata(); return $firstpost; }
Henrik Erlandsson

@rofflox : 당신은 성자입니다! get_the_title / ID / younameit를 우회하는 데 좋습니다.
Vial

8
$query->posts대신에 사용해야 $query->get_posts()합니다. 쿼리 구문 분석 및 불필요한 데이터베이스 쿼리가 다시 실행됩니다.
Tom J Nowell

$ query-> get_posts (); 예상대로 작동하지 않습니다. 이유는 확실하지 않지만 쿼리보다 적은 게시물을 반환합니다. 여기를보십시오 : stackoverflow.com/questions/25395299/…
Laxmana

1
이 답변은 일부 인수를 사용하여 새 WP_Query를 만들 때 get_posts () 메소드가 내부적으로 즉시 호출되므로 다시 호출해서는 안됩니다! 위의 예와 같이 다시 호출하면 인수 및 결과에 따라 초기 실행 (내부 플래그 세트 등)에 따라 DIFFERENT 쿼리가 실행되고 다른 (더 작은) 결과 세트가 리턴 될 수 있습니다. 또는 전혀 결과가 없습니다. TomJNowell과 Laxmana가 위에서 제안한 것처럼 $ query-> posts를 사용하여 게시물 데이터를 가져와야합니다.
ivanhoe

11

실제로 while()루프 사용을 거부 할 필요는 없습니다 . 동일한 WP_Post 오브젝트가 이미 post특성에 저장되어 있습니다.

        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {

            while ( $query->have_posts() ) {

                $query->the_post();

                // now $query->post is WP_Post Object, use:
                // $query->post->ID, $query->post->post_title, etc.

            }

        }

2
if중복됩니다.
Akkumulator

2
아니요, if중복되지 않습니다. 이 정확한 경우이지만 대부분의 프로덕션 상황에서는 if와 while 사이에서 실행할 코드가 있습니다.
magi182

2
@ magi182 이것은 정확한 경우에 중복을 만듭니다. 사람들은 이것을 언제 사용해야하는지 배워야합니다.
frodeborli

4
@frodeborli, "people should"로 시작하는 문장에 대한 좋은 점은 거의 항상 "people will't"를 대체 할 수 있으며 문장은 여전히 ​​참으로 테스트한다는 것입니다.
magi182

1
@ magi182 아마도 위의 코드를 보완하기 위해 코드 줄을 갖는 것이 좋을 것입니다.
frodeborli

-1

get_posts( $args )대신 wp_Query()에 게시물 목록을 제공하는 대신 사용할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.