¿Cómo limitar get_posts()?

24 sept 2014, 15:36:50
Vistas: 39K
Votos: 2

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.

0
Todas las respuestas a la pregunta 5
11

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.

24 sept 2014 16:02:07
Comentarios

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

Ciprian Ciprian
24 sept 2014 16:05:07

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 Jonathan
24 sept 2014 16:09:24

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 Ciprian
24 sept 2014 16:13:12

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

Ciprian Ciprian
24 sept 2014 16:13:43

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 Jonathan
24 sept 2014 16:17:10

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 Ciprian
24 sept 2014 16:23:09

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 Jonathan
24 sept 2014 16:30:26

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

Ciprian Ciprian
24 sept 2014 17:04:02

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 Otto
24 sept 2014 17:25:33

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 Ciprian
24 sept 2014 17:29:43

Sí, lo configurarías en 5, porque quieres obtener 5 publicaciones, no 50. El nombre de la variable es autoexplicativo: publicaciones por página.

Otto Otto
24 sept 2014 17:30:53
Mostrar los 6 comentarios restantes
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.

24 sept 2014 17:28:44
Comentarios

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

Ciprian Ciprian
24 sept 2014 17:30:57

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 Otto
24 sept 2014 17:33:18

¿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 Ciprian
24 sept 2014 17:46:08

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 Otto
24 sept 2014 21:47:20

Gracias Otto, resolví el problema usando un enfoque diferente. Mira mi respuesta actualizada.

Ciprian Ciprian
25 sept 2014 11:23:19
1

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).

24 oct 2017 13:46:06
Comentarios

Esto es lo que lo solucionó para mí.

newpoison newpoison
24 mar 2021 21:01:34
0

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.

24 sept 2014 16:03:51
1
-4

Puedes utilizar el hook pre_get_post para obtener el número de posts que deseas mostrar:

add_action( 'pre_get_posts', 'nombre_de_tu_funcion' );
25 sept 2014 12:47:11
Comentarios

¿Y cómo usaría el OP ese hook?

kaiser kaiser
25 sept 2014 13:37:14