Cómo establecer posts por página usando WP_Query()

26 sept 2011, 20:14:26
Vistas: 65.7K
Votos: 4

Estoy tratando de establecer el número de posts_per_page de forma dinámica usando mi propia variable. Este código funciona bien:

query_posts( $query_string  . "&posts_per_page=" . $myvar )
// luego mostrar el loop usando get_template_part( 'loop' );

Eso funciona bien, pero me gustaría saber cómo hacerlo usando $wp_query en lugar de query_posts. Sin embargo, esto no funciona:

$wp_query->set('posts_per_page', $myvar)
// luego mostrar el loop usando get_template_part( 'loop' );

Eso no tiene ningún efecto en el número de entradas mostradas. ¿Estoy usando el método set incorrectamente, o hay algo que me estoy perdiendo?

0
Todas las respuestas a la pregunta 4
0
14

query_posts realizará la consulta nuevamente (destruirá el wp_query actual y creará uno nuevo, luego ejecutará la consulta con los parámetros que le pases).

Para obtener el mismo comportamiento después de establecer el nuevo parámetro con set_var, necesitas consultar la base de datos nuevamente usando algo como esto:

 $wp_query->set('posts_per_page', 1);
 $wp_query->query($wp_query->query_vars);
26 sept 2011 20:41:29
0

cuando llamas a query_posts con una consulta modificada en tu plantilla, en realidad estás ejecutando otra consulta y descartando la original. intentar establecer una variable de consulta en tu plantilla no funciona porque la consulta original ya ha ocurrido. para usar $wp_query->set() debes engancharte antes de que se consulte la base de datos, por ejemplo en pre_get_posts.

26 sept 2011 20:39:29
1

¿Por qué necesitas usar $wp_query->set() en absoluto?

¿No puedes simplemente usar:

<?php
$my_custom_query_args = array(
    'posts_per_page' => $myvar
);
$my_custom_query = new WP_Query( $my_custom_query_args );
?>
26 sept 2011 21:43:18
Comentarios

¿No estás destruyendo todos los demás argumentos de consulta de esa manera? El método ->set() debería mantener el resto de los argumentos igual, solo cambiar post_per_page. ¿O estoy leyendo mal esto?

Sean Kendle Sean Kendle
13 sept 2021 19:36:08
1
-1

Puedes usar

$wp_query->query_vars['posts_per_page'] = 25
27 jun 2016 13:50:56
Comentarios

¡Hola! ¿Podrías ser un poco más detallado con tus respuestas y explicar también la parte del por qué esta respuesta ayuda? De lo contrario, las respuestas son marcadas automáticamente como baja calidad por el bot de la comunidad. Gracias. Pista: Tendrás que al menos envolver tu llamada en una función de callback adjunta a un filtro :)

kaiser kaiser
27 jun 2016 14:35:27