J'ai fait des recherches sur Google et WPSE et la seule chose que je vois à plusieurs reprises est d'utiliser showposts
, c'est obsolète.
Je connais bien WP_Query
, et je pensais que si je fixais posts_per_page
ma limite (c.-à-d. 5), et nopaging
à true
, cela deviendrait quelque chose comme " Ok, je ne vous donnerai que 5 messages ". Mais ça ne marche pas.
Comment puis-je faire ceci?
'posts_per_page=5'
found_posts
propriété, il indique un nombre supérieur à 5. Je veux que ma requête ne contienne que 5 messages. C'est possible? @PieterGoosennopaging
paramètre, le définir sur true signifie obtenir tous les messagesnopaging
paramètre, il obtient la valeur par défaut qui estfalse
, donc la page d'accueil affiche 5 messages, mais la requête en contient plus. J'ajoute une image à la question.Réponses:
Je pense que maintenant je comprends ce que vous essayez de faire. Lorsque vous exécutez une requête personnalisée avec
WP_Query
et définissez la limite pour obtenir seulement 5 publications par page, seules 5 publications seront récupérées par la requête et cette requête ne contiendra que 5 publications, MAIS pour des raisons de pagination,WP_Query
continue de parcourir toute la base de données et compte tous les messages qui correspondent aux critères de la requête.Cela peut être vu lorsque vous regardez les propriétés
$found_posts
et$max_num_pages
de la requête. Prenons un exemple:Vous avez 20 publications appartenant au type de publication par défaut
post
. Vous n'avez besoin que des 5 derniers messages sans pagination. Votre requête ressemble à cecivar_dump( $q->posts )
vous donnera les 5 derniers messages comme prévuecho $q->found_posts
te donnera20
echo $q->max_num_pages
te donnera4
L'impact de ce travail supplémentaire est minime sur les sites avec seulement quelques publications, mais cela peut coûter cher si vous gérez un site avec des centaines ou des milliers de publications. C'est un gaspillage de ressources si vous n'avez besoin que des 5 derniers articles
Il existe un paramètre non documenté appelé
no_found_rows
qui utilise des valeurs booléennes que vous pouvez utiliser pour rendre votre requête sous caution après avoir trouvé les 5 publications dont vous avez besoin. Cela obligera àWP_Query
ne plus rechercher de messages correspondant aux critères après avoir récupéré le nombre de messages interrogés. Ce paramètre est déjà intégré dansget_posts
, c'est pourquoiget_posts
est un peu plus rapide queWP_Query
bien que lesget_posts
utilisationsWP_Query
Conclusion
En conclusion, si vous n'utilisez pas la pagination sur une requête, il est toujours judicieux
'no_found_rows=true'
dans votre requête d'accélérer les choses et d'économiser sur le gaspillage de ressources.la source
Après la conversation avec @Pieter Goosen sur les commentaires de la question, je pense pouvoir répondre à la question et expliquer mon erreur.
La clé est que
found_posts
cela me déroutait. Je pense que ce nombre correspond aux messages récupérés, mais ce n'est pas le cas. C'est le nombre de postes qui correspondent aux critères . C'est commeWP_Query
s'il y avait 2 parties: l'une pour trouver (tous) les messages, et l'autre pour récupérer le contenu, lorsqu'il vérifie lespagination
paramètres. Nous avons donc la$post_count
propriété qui est le nombre de messages récupérés (Codex ditThe number of posts being displayed
), qui est bien sûr égal au nombre sur leposts_per_page
paramètre, et le nombre d'éléments sur la$posts
propriété du tableau.Donc ,
WP_Query
ne fait rien de travail inutile, comme je pensais ^^J'espère que cela aide les autres!
la source
Ok, vous permet d'avoir un type de publication appelé 'blog_posts', et vous souhaitez récupérer 5 publications de ce type de publication. Voici ce que tu dois faire
La requête ci-dessus renverra 5 messages de type 'blog_posts', s'il ne s'agit pas d'un type de message personnalisé, remplacez simplement comme ceci
'post_type' => 'posts',
si vous voulez récupérer tous les messages puis remplacez comme ceci'posts_per_page' => '-1',
, pour plus de détails WP Queryla source
Je sais que @ user1750063 a mentionné le code mais essayez ceci
la source
id
n'est pas uneorderby
valeur etpagination
est un paramètre non validepagination
n'est pas un paramètre valide. Tu veux dire'nopaging' => true
? Si oui, je recevrai TOUS les messages. Ce n'est pas ce que je veux. @PieterGoosen Je pense qu'il veut direID
.ID
, pasid