WP_Query가 가져 오는 게시물 수를 제한하는 방법은 무엇입니까?
-
-
` 'posts_per_page=5'` 만Just `'posts_per_page=5'`
- 0
- 2015-03-18
- Pieter Goosen
-
나는 그것을 사용하지만 모든 게시물을 찾았습니다.`found_posts` 속성에 액세스하면 5보다 큰 숫자로 표시됩니다. 쿼리에 5 개의 게시물 만 포함하고 싶습니다.¿ 가능합니까?안녕하세요.I use that, but that found all the posts. If I access to the `found_posts` property, it says a higher number than 5. I want my query to hold only 5 posts. ¿Is it possible? @PieterGoosen
- 0
- 2015-03-18
- EliasNS
-
'nopaging'매개 변수를 설정해서는 안됩니다.true로 설정하면 ** 모든 ** 게시물을 가져 오는 것입니다.You should not set the `nopaging` parameter, setting that to true means to get **all** posts
- 0
- 2015-03-18
- Pieter Goosen
-
@PieterGoosen`nopaging` 매개 변수를 설정하지 않으면 기본값 인`false`를 가져 오므로 프론트 페이지에는 5 개의 게시물이 표시되지만 쿼리에는 더 많은 게시물이 표시됩니다.질문에 이미지를 추가합니다.@PieterGoosen If I don't set the `nopaging` parameter it gets the default that is `false`, so the frontpage shows 5 posts, but the query holds more. I add an image to the question.
- 0
- 2015-03-18
- EliasNS
-
귀하의 의견은 혼란스럽고 페이지에 표시되는 게시물의 양을 5 개로 제한하도록 요청했습니다.이제 (이전 의견을 다시 읽으십시오 :-)) 쿼리가 더 많이 보유한다고 말합니다.설명 해주십시오.posts_per_page를 설정 한 다음 동일한 쿼리에서true로 설정된no_paging을 사용할 수 없습니다. 이는posts_per_page ** 또는 **nopaging이true로 설정된 것입니다.Your comments are confusing, you asked to limit the amount of posts shown on a page to 5, that is what you get. Now, you say (reread your previous comment :-)) the query holds more. Please explain. You cannot set posts_per_page and then use no_paging set to true in the same query, it is either posts_per_page **OR** nopaging set to true
- 0
- 2015-03-18
- Pieter Goosen
-
내 질문은 "gets"입니다.쿼리가 표시된 게시물보다 더 많은 게시물을 보유하면 필요한 것보다 더 많은 작업을 수행하고 있다고 생각합니다.나는 그것을 피할 수 있는지 알고 싶습니다.숨겨진 탐색으로 탐색 가능한 결과를 원하지 않습니다.My question says "gets". I think that if the query holds more posts that the shown ones, it is doing more work than needed. I just want to know if it is possible to avoid that. I don't want navigable results with a hidden navigation.
- 0
- 2015-03-18
- EliasNS
-
쿼리에는 요청한 게시물이 더 이상 포함되지 않습니다.5 개를 요청하면 요구 사항에 맞는 게시물이 5 개 이상일 경우 5 개의 게시물이 검색됩니다.쿼리 변수가`$ query` 인 경우`var_dump ($ query->posts)`와 같이 쿼리의`var_dump ()`를 수행합니다.조회 한 게시물 5 개만 표시됩니다.The query will not hold more posts that you have asked for. If you ask for 5, 5 posts will be retrieved if there is more than 5 posts that matches the requirements. Do a `var_dump()` of your query, like if your query variable is `$query`, do `var_dump( $query->posts )`. You will only see the 5 posts you queried for
- 0
- 2015-03-18
- Pieter Goosen
-
5 대답
- 투표
-
- 2015-03-18
이제 수행하려는 작업을 이해 한 것 같습니다.
WP_Query
로 사용자 지정 쿼리를 실행하고 페이지 당 5 개의 게시물 만 가져 오도록 제한을 설정하면 쿼리에서 5 개의 게시물 만 검색되고 해당 쿼리는 5 개의 게시물 만 보유합니다. BUT 페이지 매김을 위해WP_Query
는 여전히 전체 데이터베이스를 통해 실행되며 쿼리 기준과 일치하는 모든 게시물을 계산합니다.쿼리의
$found_posts
및$max_num_pages
속성을 보면 알 수 있습니다. 예를 들어 보겠습니다.기본 게시물 유형
post
에 속하는 게시물이 20 개 있습니다. 페이지 매김없이 최신 게시물 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결론
결론적으로 쿼리에서 페이지 매김을 사용하지 않을 경우 쿼리에서 항상
'no_found_rows=true'
속도를 높이고 자원 낭비를 줄일 수 있습니다.I think that now I understand what you are trying to do. When you run a custom query with
WP_Query
and set the limit to get only 5 posts per page, only 5 posts will be retrieved by the query and that query will only hold 5 posts, BUT for the sake of pagination,WP_Query
still runs through the whole database and counts all the posts that matches the criteria of the query.That can be seen when you look at the
$found_posts
and$max_num_pages
properties of the query. Lets take an example:You have 20 posts belonging to the default post type
post
. You only need the latest 5 posts without pagination. Your query looks like this$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
will give you the latest 5 posts as expectedecho $q->found_posts
will give you20
echo $q->max_num_pages
will give you4
The impact of this extra work is minimal on sites with only a few posts, but this can gt expensive if you are running a site with hundreds or thousands of posts. This is a waste of resources if you are only ever going to need the 5 latest posts
There is an undocumented parameter called
no_found_rows
which uses boolean values which you can use to make your query bail after it found the 5 posts you need. This will forceWP_Query
not to look for any more posts mathing the criteria after it has retrieved the amount of posts queried. This parameter is already build intoget_posts
, that is whyget_posts
is a bit faster thanWP_Query
althoughget_posts
usesWP_Query
Conclusion
In conclusion, if you are not going to use pagination on a query, it is always wise to
'no_found_rows=true'
in your query to speed things up and to save on wasting resources. -
- 2015-03-18
@Pieter Goosen과 질문에 대한 의견에 대해 대화 한 후 질문에 답하고 실수를 설명 할 수있을 것 같습니다.
핵심은
found_posts
가 저를 혼란스럽게한다는 것입니다.나는 그 숫자가 검색된 게시물이지만 그렇지 않다고 생각한다. 기준과 일치하는 게시물 수입니다 .마치WP_Query
에 두 부분이있는 것과 같습니다. 하나는 (모든) 게시물을 찾기위한 것이고 다른 하나는pagination
매개 변수를 확인할 때 콘텐츠를 가져 오는 부분입니다.따라서 가져온 게시물 수인$post_count
속성이 있습니다 (Codex는The number of posts being displayed
를 말합니다). 물론posts_per_page
매개 변수 및$posts
배열 속성의 항목 수그래서
WP_Query
는 제가 생각했던 것처럼 쓸데없는 일을하지 않습니다 ^^다른 사람들에게 도움이되기를 바랍니다.
After the conversation with @Pieter Goosen on the comments of the question, I think I can answer the question and explain my mistake.
The key is that
found_posts
was confussing me. I thougth that, that number is the posts retrieved but is not. It is the number of posts that match the criteria. It's like theWP_Query
had 2 parts: one for finding (all) the posts, and other for fetching the content, when it checks for thepagination
parameters. So we have the$post_count
property that is the number of posts fetched (Codex saysThe number of posts being displayed
), that of course is equal to the number onposts_per_page
parameter, and the number of items on the$posts
array property.So
WP_Query
is not doing any useless work, as I thought ^^Hope this helps others!
-
내 대답을 참조하십시오.나는 당신이 의미하는 바를 이해한다고 생각합니다 :-)See my answer. I think I understand what you mean :-)
- 0
- 2015-03-18
- Pieter Goosen
-
예!당신은 그것을 아주 잘했습니다 : D 마침내 나는 그것을 할 방법을 얻었고,나는 모두 이해합니다=D 감사합니다 @PieterGoosen!Yes! You did it very well :D Finally I got the way to do it, and I understand all =D Thanks @PieterGoosen!
- 0
- 2015-03-19
- EliasNS
-
끝난!그것은 내 자신의 대답을 확장했습니다 ^^ @PieterGoosenDone! It extended my own answer ^^ @PieterGoosen
- 0
- 2015-03-19
- EliasNS
-
- 2015-03-18
알겠습니다. '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 쿼리Ok , lets you have post type called 'blog_posts' , and you want to fetch 5 posts of that post type . Here is what you need to do
$args = array( 'post_type' => 'blog_posts', 'posts_per_page' => '5', ); $query = new WP_Query($args);
The above query will return 5 posts of type 'blog_posts' , if it is not a custom post type , then just replace like this
'post_type' => 'posts',
if you want to fetch all posts then replace like this'posts_per_page' => '-1',
, for more details WP Query-
질문에 대한 의견을 참조하십시오.See the comments on the question, please.
- 0
- 2015-03-18
- EliasNS
-
- 2015-03-18
@ 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
I know that @user1750063 has mentioned the code but try this
$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
-
`id`는`orderby` 값으로 유효하지 않으며`pagination`은 유효하지 않은 매개 변수입니다.`id` is invalid as an `orderby` value and `pagination` is an invalid parameter
- 0
- 2015-03-18
- Pieter Goosen
-
'페이지 매김'은 유효한 매개 변수가 아닙니다.` 'nopaging'=>true`를 의미합니까?그렇다면 모든 게시물을 받게됩니다.그것은 내가 원하는 것이 아닙니다.@PieterGoosen 나는 그가 'ID'를 의미한다고 생각합니다.`pagination`is not a valid parameter. You mean `'nopaging' => true`? If yes, then I'll get ALL posts. That's not what I want. @PieterGoosen I think he means `ID`.
- 0
- 2015-03-18
- EliasNS
-
orderby는 주문을 표시하는 것입니다.nopaging 값/파라미터에 해를 끼치 지 않습니다. @PieterGoosen ID 및 orderby가 잘못된 이유는 무엇입니까?요점을 명확히 할 수 있습니까?orderby is for displaying the order, right? It does not harm the nopaging value/ parameter. @PieterGoosen why is ID & orderby is invalid? Can you clarify the point?
- 0
- 2015-03-18
- Shreyo Gi
-
'id'가 아닌 'ID'여야합니다.It should be `ID`, not `id`
- 0
- 2015-03-18
- Pieter Goosen
-
- 2020-06-18
맞춤 필드로 제한하겠습니다. 아래 쿼리 샘플을 확인하세요.
$wp_query = new WP_Query("orderby=DESC&post_type=portfolio&meta_key=FeaturedProject&meta_value=1&posts_per_page=6");
6 개의 추천 프로젝트가 반환됩니다.
I would limit it with custom fields, check this query sample below:
$wp_query = new WP_Query("orderby=DESC&post_type=portfolio&meta_key=FeaturedProject&meta_value=1&posts_per_page=6");
It will return 6 Featured projects.
저는 Google과 WPSE에 대해 조사해 왔으며 반복적으로 볼 수있는 유일한 것은 더 이상 사용되지 않는
showposts
를 사용하는 것입니다.저는
WP_Query
에 익숙하며posts_per_page
를 내 제한 (예 : 5)으로 설정하고nopaging
을true
는 " Ok,I 'llgive you only 5posts "와 같은 형식이됩니다.그러나 이것은 작동하지 않습니다.어떻게 할 수 있습니까?