¿Cómo limitar get_posts()?
He estado investigando esto durante los últimos 3 días. Estoy tratando de limitar la cantidad máxima de entradas recuperadas por get_posts()
.
Tengo este fragmento de código:
// todos los filtros deberían aplicarse aquí
$args = array(
'nopaging' => true,
'post_type' => get_option('ip_slug'),
'posts_per_page' => $ip_ipp,
'limit' => 100,
'orderby' => $ip_order,
'order' => $ip_order_asc_desc,
'author' => $author,
'suppress_filters' => false,
'meta_key' => $ip_meta,
'meta_query' => array(
array(
'key' => $ip_key,
)
),
'cache_results' => false,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
'no_found_rows' => true,
);
$posts = get_posts($args);
//
El parámetro limit
no funciona.
ACTUALIZACIÓN #1: Quiero usar, digamos, 5
entradas por página y usar múltiples consultas en la misma página usando get_posts()
(no query_posts
, no WP_Query
) y quiero limitar la consulta de la base de datos a 100
. No puedo usar el parámetro paged
, debido a múltiples bucles creados dinámicamente.
Puedes usar posts_per_page
o numberposts
.
http://codex.wordpress.org/Template_Tags/get_posts#Parameters
EDITADO: Respecto a tu edición. No puedes tener posts_per_page
diferente al LIMIT
en la consulta SQL. get_posts()
crea una instancia de WP_Query
y la retorna usando el posts_per_page
como LIMIT.

posts_per_page
no limita la consulta real de get_posts()
. Además, numberposts
no funciona.

Entonces, ¿por qué dices en tu comentario que usaste posts_per_page
? Si estás paginando, estableces el parámetro paged
con el número de página y posts_per_page
limitará la cantidad de registros. No hay un parámetro limit
en WP_Query

Mi solución no es una verdadera solución de WordPress. Muestro 100 publicaciones y uso una técnica de paginación con jQuery. Así que la pregunta aún no está respondida. Necesito una solución de posts_per_page
combinada con un parámetro limit
. Solo necesito que get_posts()
recupere 100 publicaciones, para poder paginarlas, no sé, 5 o 10 por página. No hay forma de limitar la consulta de get_posts()
sin usar el parámetro posts_per_page
.

Además, no puedo usar el parámetro paged
, ya que estoy usando múltiples consultas en la misma página.

Podrías usar offset
junto con posts_per_page
para solucionar el no poder usar paged
, o como tienes múltiples consultas en la página probablemente sería mejor crear un nuevo objeto WP_Query para las consultas secundarias.

Las consultas se crean dinámicamente, por lo que no hay una primaria o secundaria. No quiero usar offset
, quiero usar get_posts()
con posts_per_page
establecido en 99999
y limitar la consulta de la base de datos a 100
.

No hay forma de tener posts_per_page
= 99999 y que la consulta a la base de datos sea de 100 porque posts_per_page
es lo que establece el límite en la consulta. No veo una razón para hacer esto, tal vez actualiza tu pregunta con más detalles sobre lo que quieres lograr.

He actualizado mi pregunta. Necesito un parámetro limit
para pasar a la consulta SQL LIMIT
.

El posts_per_page es lo que realmente establece el LIMIT en el SQL. Entonces, no estás teniendo mucho sentido, posts_per_page y el SQL LIMIT son exactamente lo mismo. No puedes separarlos.

Gracias @Otto. Normalmente uso posts_per_page
para definir el número de publicaciones por página a mostrar. Así que tengo 10 páginas, con 5 publicaciones por página, eso hace un total de 50 publicaciones. No puedo establecer posts_per_page
en 50 en este caso, ¿correcto? Necesito configurarlo en 5.

El parámetro "limit" no funciona porque no existe tal parámetro en get_posts ni en ninguna otra consulta en WordPress.
Puedes usar posts_per_page
para establecer el número de entradas a recuperar, y offset
para que omita un cierto número de entradas. Estos son los únicos parámetros que puedes usar, y juntos, modifican el LIMIT resultante en la consulta SQL que se realiza.

¿Puedes darme un ejemplo de una consulta get_posts()
para 100
posts y 5
posts por página?

Estás confundiendo dos cosas diferentes aquí. El número "100" no entra en juego para nada. Tienes 100 posts. Quieres mostrar cinco de ellos. Configuras posts_per_page a 5. Fin de la declaración. Cuántos posts o páginas totales tengas no hace ninguna diferencia en absoluto.

¿Qué pasa si tengo 10000 posts? ¿Cómo limito la consulta? ¿No hay un parámetro, un hook o un filtro para modificar la consulta?

Hay muchas formas de modificar la consulta, pero mi punto es que no estás extrayendo 10000 publicaciones, solo las estás extrayendo de 5 en 5. Así que el único valor que importa es "5". Cuántas publicaciones hay es irrelevante, no estás obteniendo todas las publicaciones en una sola consulta.

Tienes el siguiente parámetro habilitado que bloquea la paginación, por lo que cualquier limitación pierde sentido:
'nopaging' => true
Cámbialo a "desactivado" o elimínalo. Por cierto, la función get_posts() limita las publicaciones a 5 por defecto en la última versión de WordPress. O puedes usar el atributo posts_per_page para establecer directamente el límite o hacerlo desde el panel de administración (Ajustes-> Lectura).

He resuelto este problema, he utilizado el parámetro posts_per_page
con un valor de 100
y he usado jPages para la paginación con jQuery.
Explicación: Como necesitaba recuperar un número limitado de publicaciones - en mi caso, 210
- quería utilizar tanto la paginación como un límite en la consulta. Ya que esto parece imposible usando get_posts()
, utilicé el parámetro posts_per_page
con un valor de 210
e implementé una paginación con jPages. No es la solución más elegante, pero funciona.
