He estado investigando en Google y WPSE y lo único que veo repetidamente es usar showposts
, eso está en desuso.
Estoy familiarizado con WP_Query
, y pensé que si me puse posts_per_page
a mi límite (es decir. 5), y nopaging
que true
, se convertiría en algo como " Ok, te voy a dar sólo 5 mensajes ". Pero esto no funciona.
¿Cómo puedo hacer esto?
'posts_per_page=5'
found_posts
propiedad, dice un número mayor que 5. Quiero que mi consulta contenga solo 5 publicaciones. ¿Es posible? @PieterGoosennopaging
parámetro, establecerlo en verdadero significa obtener todas las publicacionesnopaging
parámetro, se obtiene el valor predeterminadofalse
, por lo que la portada muestra 5 publicaciones, pero la consulta contiene más. Agrego una imagen a la pregunta.Respuestas:
Creo que ahora entiendo lo que estás tratando de hacer. Cuando ejecuta una consulta personalizada
WP_Query
y establece el límite para obtener solo 5 publicaciones por página, la consulta solo recuperará 5 publicaciones y esa consulta solo contendrá 5 publicaciones, PERO en aras de la paginación,WP_Query
todavía se ejecuta en toda la base de datos y cuenta todas las publicaciones que coinciden con los criterios de la consulta.Eso se puede ver cuando observa las propiedades
$found_posts
y$max_num_pages
de la consulta. Tomemos un ejemplo:Tiene 20 publicaciones que pertenecen al tipo de publicación predeterminado
post
. Usted solamente necesita los últimos 5 mensajes sin paginación. Su consulta se ve asívar_dump( $q->posts )
le dará las últimas 5 publicaciones como se esperabaecho $q->found_posts
Te regalaré20
echo $q->max_num_pages
Te regalaré4
El impacto de este trabajo adicional es mínimo en sitios con solo unas pocas publicaciones, pero esto puede ser costoso si está ejecutando un sitio con cientos o miles de publicaciones. Esto es un desperdicio de recursos si solo vas a necesitar las 5 últimas publicaciones
Hay un parámetro indocumentado llamado
no_found_rows
que utiliza valores booleanos que puede usar para hacer que su consulta salga después de encontrar las 5 publicaciones que necesita. Esto forzará aWP_Query
no buscar más publicaciones sobre los criterios después de que haya recuperado la cantidad de publicaciones consultadas. Este parámetro ya está integradoget_posts
, es por eso queget_posts
es un poco más rápido queWP_Query
aunqueget_posts
usaWP_Query
Conclusión
En conclusión, si no va a utilizar la paginación en una consulta, siempre es aconsejable
'no_found_rows=true'
en su consulta acelerar las cosas y ahorrar en el desperdicio de recursos.fuente
Después de la conversación con @Pieter Goosen sobre los comentarios de la pregunta, creo que puedo responderla y explicar mi error.
La clave es que
found_posts
me estaba confundiendo. Creo que ese número son las publicaciones recuperadas pero no lo es. Es la cantidad de publicaciones que coinciden con los criterios . Es como siWP_Query
tuvieran 2 partes: una para encontrar (todas) las publicaciones y otra para buscar el contenido, cuando verifica lospagination
parámetros. Entonces, tenemos la$post_count
propiedad que es el número de publicaciones recuperadas (dice el CodexThe number of posts being displayed
), que por supuesto es igual al número en elposts_per_page
parámetro y el número de elementos en la$posts
propiedad de matriz.Entonces
WP_Query
no está haciendo ningún trabajo inútil, como pensé ^^Espero que esto ayude a otros!
fuente
Ok, le permite tener un tipo de publicación llamado 'blog_posts', y desea obtener 5 publicaciones de ese tipo de publicación. Aquí está lo que tú necesitas hacer
La consulta anterior devolverá 5 publicaciones del tipo 'blog_posts', si no es un tipo de publicación personalizado, simplemente reemplace de esta manera
'post_type' => 'posts',
si desea recuperar todas las publicaciones y luego reemplace de esta manera'posts_per_page' => '-1',
, para más detalles Consulta WPfuente
Sé que @ user1750063 ha mencionado el código pero intente esto
fuente
id
no es válido comoorderby
valor ypagination
es un parámetro no válidopagination
No es un parámetro válido. Quieres decir'nopaging' => true
? En caso afirmativo, obtendré TODAS las publicaciones. Eso no es lo que quiero. @PieterGoosen Creo que quiere decirID
.ID
, noid