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