Come limitare il numero di post che WP_Query riceve?
-
-
Solo ""posts_per_page=5 "Just `'posts_per_page=5'`
- 0
- 2015-03-18
- Pieter Goosen
-
Lo uso,ma hatrovatotuttii post.Se accedo allaproprietà `found_posts`,viene visualizzato unnumeromaggiore di 5. Voglio che lamia query contenga solo 5post.Èpossibile?@PieterGoosenI 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
-
Non dovrestiimpostareilparametro `nopaging`,impostarlo sutrue significa ottenere **tutti **i postYou should not set the `nopaging` parameter, setting that to true means to get **all** posts
- 0
- 2015-03-18
- Pieter Goosen
-
@PieterGoosen Senonimpostoilparametro `nopaging` ottieneil valorepredefinito che è`false`,quindi laprimapaginamostra 5post,ma la queryne contiene dipiù.Aggiungo un'immagine alla domanda.@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
-
Ituoi commenti sono confusi,hai chiesto di limitare a 5ilnumero dipostmostrati su unapagina,questo è ciò che ottieni.Ora dici (rileggiiltuo commentoprecedente :-)) la query contiene dipiù.Spiegaperfavore.Nonpuoiimpostareposts_per_pagee quindi utilizzareno_pagingimpostato sutruenella stessa query,è oposts_per_page ** OPPURE **nopagingimpostato sutrueYour 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
-
Lamia domanda dice "ottiene".Penso che se la query contienepiùpost di quellimostrati,stafacendopiù lavoro delnecessario.Voglio solo sapere se èpossibileevitarlo.Non voglio risultatinavigabili con unanavigazionenascosta.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
-
La querynon conterràpiùpost che hai richiesto.Sene chiedi 5,verranno recuperati 5post se sonopresentipiù di 5post che corrispondono ai requisiti.Esegui una `var_dump ()` dellatua query,come se latua variabile di queryfosse `$ query`,fai` var_dump ($ query->posts) `.Vedrai soloi 5post che hai richiestoThe 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 risposta
- voti
-
- 2015-03-18
Penso di aver capito cosa stai cercando difare. Quandoesegui una querypersonalizzata con
WP_Query
e impostiil limiteper ottenere solo 5postperpagina,solo 5post verranno recuperati dalla querye quella query conterrà solo 5post, MA permotivi diimpaginazione,WP_Query
continua a scorrere l'intero databasee contatuttii post che corrispondono ai criteri della query.Questopuòessere visto quando siguardano leproprietà
$found_posts
e$max_num_pages
della query. Facciamo unesempio:Hai 20post che appartengono altipo dipostpredefinito
post
. Hai solo bisogno degli ultimi 5post senzaimpaginazione. Latua query è simile a questa$ q=new WP_Query ('posts_per_page=5');
-
var_dump ($ q- >posts)
ti forniràgli ultimi 5post comeprevisto -
echo $ q- >found_posts
ti darà20
-
echo $ q- >max_num_pages
ti darà4
L'impatto di questo lavoroextra èminimo sui siti con solopochipost,mapuò diventare costoso segestisci un sito con centinaia omigliaia dipost. Questo è uno spreco di risorse seti serviranno sologli ultimi 5post
Esiste unparametronon documentato chiamato
no_found_rows
che utilizza valoribooleani chepuoi utilizzareper salvare la query dopo avertrovatoi 5post di cui haibisogno. Questo costringeràWP_Query
anon cercarepiùpost che calcolinoi criteri dopo aver recuperato la quantità dipostinterrogati. Questoparametro ègiàintegratoinget_posts
,eccoperchéget_posts
è unpo 'più veloce diWP_Query
sebbeneget_posts
utilizzi < codice> WP_QueryConclusione
In conclusione,senonintendi utilizzare l'impaginazione su una query,è sempre consigliabile
'no_found_rows=true'
nella queryper velocizzaree per risparmiare sugli sprechi di risorse.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
Dopo la conversazione con @Pieter Goosen sui commenti alla domanda,penso dipoter rispondere alla domandae spiegareilmioerrore.
La chiave è che
found_posts
mi ha confuso.L'hopensato,quelnumero èilpost recuperatomanon lo è. Èilnumero dipost che corrispondono ai criteri .È come seWP_Query
avesse 2parti: unapertrovare (tutti)i poste l'altraper recuperareil contenuto,quando controllai parametripagination
.Quindi abbiamo laproprietà$post_count
che èilnumero dipost recuperati (Codex diceIlnumero dipost visualizzati
),che ovviamente è uguale alnumero suposts_per_page e ilnumero dielementinellaproprietà dell'array $posts
.Quindi
WP_Query
non stafacendo alcun lavoroinutile,comepensavo ^^Spero che questo aiutigli altri!
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!
-
Vedi lamia risposta.Penso di aver capito cosaintendi :-)See my answer. I think I understand what you mean :-)
- 0
- 2015-03-18
- Pieter Goosen
-
Sì!Haifattomoltobene: D Finalmente ho avutomodo difarlo,e ho capitotutto=D Grazie @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
-
Fatto!Haesteso lamia risposta ^^ @PieterGoosenDone! It extended my own answer ^^ @PieterGoosen
- 0
- 2015-03-19
- EliasNS
-
- 2015-03-18
Ok,ti consente di avere untipo dipost chiamato "blog_posts"e vuoi recuperare 5post di queltipo dipost.Ecco cosa devifare
$args = array( 'post_type' => 'blog_posts', 'posts_per_page' => '5', ); $query = new WP_Query($args);
La queryprecedente restituirà 5post ditipo "blog_posts",senon è untipo dipostpersonalizzato,sostituisci semplicementein questomodo
'post_type' => 'posts',
se desideri recuperaretuttii post,sostituisciliin questomodo'posts_per_page' => '-1',
,per ulteriori dettagli WP QueryOk , 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-
Vederei commenti sulla domanda,perfavore.See the comments on the question, please.
- 0
- 2015-03-18
- EliasNS
-
- 2015-03-18
So che @ user1750063 hamenzionatoil codicemaprova questo
$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"non è valido come valore "orderby"e "paginazione" è unparametronon valido`id` is invalid as an `orderby` value and `pagination` is an invalid parameter
- 0
- 2015-03-18
- Pieter Goosen
-
"pagination"non è unparametro valido.Intendi `'nopaging'=>true`?Se sì,riceverò TUTTIi post.Non è quello che voglio.@PieterGoosen Penso che significhi "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 serveper visualizzare l'ordine,giusto?Non danneggiail valore/parametronopaging. @PieterGoosenperché IDe orderbynon sono validi?Puoi chiarireilpunto?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
-
Dovrebbeessere "ID",non "id"It should be `ID`, not `id`
- 0
- 2015-03-18
- Pieter Goosen
-
- 2020-06-18
Lo limiterei con campipersonalizzati,controlla questoesempio di query di seguito:
$wp_query = new WP_Query("orderby=DESC&post_type=portfolio&meta_key=FeaturedProject&meta_value=1&posts_per_page=6");
Restituirà 6progettiin primopiano.
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.
Hoeffettuato ricerche su Googlee WPSEe l'unica cosa che vedo ripetutamente è utilizzare
showposts
,che è obsoleto.Conosco
WP_Query
e hopensato che seimpostoposts_per_page
almio limite (es. 5)enopaging
atrue
,diventerebbe qualcosa come " Ok,ti do solo 5post ".Ma questononfunziona.Comepossofarlo?