WP_Query가 얻는 게시물 수를 제한하는 방법은 무엇입니까?


25

나는 Google과 WPSE에 대해 연구 해 왔으며 반복적으로 볼 수있는 유일한 것은 사용 showposts되지 않는 것입니다.

에 대해 잘 알고 있으며 WP_Query, 내가 posts_per_page한도 (예 : 5)로 설정하고 nopaging~ true로 설정하면 ' 좋아요, 5 개의 게시물 만 제공하겠습니다 '와 같은 형식이 될 것이라고 생각했습니다 . 그러나 이것은 작동하지 않습니다.

여기에 이미지 설명을 입력하십시오

어떻게해야합니까?


그냥'posts_per_page=5'
피터 구센

나는 그것을 사용하지만 모든 게시물을 찾았습니다. found_posts속성에 액세스하면 5보다 높은 숫자가 표시됩니다. 쿼리에 5 개의 게시물 만 보유하고 싶습니다. ¿ 가능합니까? @PieterGoosen
EliasNS

nopaging매개 변수를 설정하면 true로 설정하면 모든 게시물 을 얻는 것을 의미합니다.
Pieter Goosen

@PieterGoosen nopaging매개 변수를 설정하지 않으면 기본값이 false이므로 프론트 페이지에 5 개의 게시물이 표시되지만 쿼리에는 더 많은 내용이 포함됩니다. 질문에 이미지를 추가합니다.
EliasNS

귀하의 의견이 혼란 스럽기 때문에 페이지에 표시되는 게시물 수를 5 개로 제한하도록 요청했습니다. 이제, 당신은 (이전 주석을 다시 읽으십시오 :-)) 쿼리가 더 많이 보유하고 있다고 말합니다. 설명 해주십시오. 같은 쿼리에서 posts_per_page를 설정할 수 없으며 no_paging을 true로 설정 하면 posts_per_page 또는 nopaging이 true로 설정됩니다.
Pieter Goosen

답변:


43

나는 지금 당신이 무엇을하려고하는지 이해한다고 생각합니다. 당신이 사용자 정의 쿼리를 실행할 때 WP_Query페이지 당 5 게시물을 얻을 수있는 제한을 설정, 5 게시물은 조회에 의해 검색되고 그 쿼리는 5 개 게시물을 개최합니다, 하지만 매김을 위해, WP_Query여전히 전체 데이터베이스를 통해 실행 검색어 기준과 일치하는 모든 게시물을 계산합니다.

쿼리 의 $found_posts$max_num_pages속성을 보면 알 수 있습니다. 예를 들어 보자.

기본 게시물 유형에 속하는 20 개의 게시물이 있습니다 post. 당신은 단지 매김없이 최신의 5 게시물이 필요합니다. 귀하의 검색어는 다음과 같습니다

$q = new WP_Query( 'posts_per_page=5' );
  • var_dump( $q->posts ) 예상대로 최신 5 개의 게시물을 제공합니다
  • echo $q->found_posts 너에게 줄거야 20
  • echo $q->max_num_pages 너에게 줄거야 4

이 추가 작업의 영향은 게시물이 몇 개인 사이트에서는 최소화되지만 수백 또는 수천 개의 게시물이있는 사이트를 실행하는 경우 비용이 많이들 수 있습니다. 5 개의 최신 게시물 만 필요한 경우 리소스 낭비입니다.

no_found_rows필요한 5 개의 게시물을 찾은 후 쿼리를 중단시키는 데 사용할 수있는 부울 값을 사용 하는 문서화되지 않은 매개 변수 가 있습니다. 이렇게하면 WP_Query쿼리 된 게시물의 양을 검색 한 후 기준을 계산하는 게시물을 더 이상 찾지 않습니다. 이미으로 구축되어이 매개 변수 get_posts이유는, get_posts조금 더 빠른 것보다 WP_Query비록 get_posts사용WP_Query

결론

결론적으로 쿼리에서 페이지 매김을 사용하지 않을 경우 'no_found_rows=true'쿼리 속도를 높이고 리소스 낭비를 줄이는 것이 항상 현명 합니다.


3

@Pieter Goosen과 질문에 대한 의견을 나누고 나면 질문에 대답하고 실수를 설명 할 수 있다고 생각합니다.

열쇠는 found_posts나를 혼란스럽게 했다는 것입니다. 나는 그 숫자는 검색된 게시물이지만 그렇지 않다고 생각한다. 기준과 일치하는 게시물 수입니다 . 그것은이처럼 WP_Query, 컨텐츠를 페치 (모든) 찾기위한 하나의 게시물 및 기타 경우에 그것을 검사 :이 부분이 있었다 pagination매개 변수를 설정합니다. 따라서 우리는 $post_count가져온 포스트 수 (Codex says The number of posts being displayed), 즉 posts_per_page매개 변수의 수 및 $posts배열 속성 의 항목 수와 같은 속성을 갖습니다 .

그래서 WP_Query내가 생각으로, 어떤 쓸모없는 일을하지 않습니다 ^^

이것이 다른 사람들을 돕기를 바랍니다!


내 대답을 참조하십시오. 나는 당신이 무슨 뜻인지 이해한다고 생각합니다 :-)
Pieter Goosen

예! 당신은 그것을 잘했습니다 : D 마침내 나는 그것을 할 수있는 방법을 얻었고, 나는 모든 = D 감사합니다 @PieterGoosen을 이해합니다!
EliasNS

끝난! 그것은 내 자신의 답변을 확장 ^^ @PieterGoosen
EliasNS

1

Ok, 'blog_posts'라는 게시물 유형을 가질 수 있으며 해당 게시물 유형의 게시물 5 개를 가져 오려고합니다. 여기 당신이해야 할 일이 있습니다

$args = array(
        'post_type' => 'blog_posts',
        'posts_per_page' => '5',
);


$query = new WP_Query($args);

이 사용자 정의 포스트 유형이 아닌 경우에는, 위의 쿼리는 단지 다음과 같이 대체 입력 'blog_posts'의 5 개 게시물을 반환합니다 'post_type' => 'posts',당신이 모든 게시물을 가져올 같이 교체 할 경우 'posts_per_page' => '-1',자세한 내용은, WP 쿼리


질문에 대한 의견을 참조하십시오.
EliasNS

1

@ user1750063이 코드를 언급했지만 시도해보십시오.

$args = array (
    'post_type'              => 'custom_post',
    'nopaging'               => false,
    'posts_per_page'         => '5',
    'order'                  => 'DESC',
    'orderby'                => 'ID',
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // display content
    }
} else {
    // display when no posts found
}

wp_reset_postdata();     // Restore original Post Data

idorderbypagination으로 유효하지 않으며 유효하지 않은 매개 변수입니다.
Pieter Goosen

pagination유효한 매개 변수가 아닙니다. 당신은 의미 'nopaging' => true합니까? 그렇다면 모든 게시물을 얻습니다. 그것은 내가 원하는 것이 아닙니다. @PieterGoosen 나는 그가 의미하는 것 같아요 ID.
EliasNS

orderby는 주문을 표시하는 것입니다. 노핑 값 / 파라미터에 영향을 미치지 않습니다. @PieterGoosen 왜 ID 및 orderby가 유효하지 않습니까? 요점을 명확히 할 수 있습니까?
Shreyo Gi

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