¿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.
Ciprian
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
Jonathan
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.
Ciprian
Además, no puedo usar el parámetro paged, ya que estoy usando múltiples consultas en la misma página.
Ciprian
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.
Jonathan
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.
Ciprian
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.
Jonathan
He actualizado mi pregunta. Necesito un parámetro limit para pasar a la consulta SQL LIMIT.
Ciprian
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.
Otto
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.
Ciprian
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?
Ciprian
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.
Otto
¿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?
Ciprian
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.
Otto
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.