Cómo establecer posts por página usando WP_Query()
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?

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

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
.

¡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 :)
