¿Cómo anular el número predeterminado de publicaciones para un bucle personalizado en WordPress?
¿Es posible anular el número establecido de publicaciones de blog a mostrar por página (definido en Ajustes de Lectura en el administrador de WordPress)? Quiero hacer que un bucle personalizado que estoy usando muestre un número ilimitado de publicaciones.

El argumento que controla cuántas publicaciones se muestran en la consulta es posts_per_page
<?php query_posts( array(
'post_type' => 'post',
'posts_per_page' => -1 )
);
?>
También hay que tener en cuenta que existe un error en la rama 3.0 que impide que el entero -1 muestre todas las publicaciones. Está corregido en la versión 3.1, pero una solución alternativa sería usar un número muy alto en lugar de -1
ver:

Hay un error tipográfico en tu parámetro para posts_per_page. Tienes post_per_page en lugar de posts_per_page. (Intenté editar tu publicación, pero no tengo permisos de edición). ¡Muchas gracias!

Tuve el mismo problema... Decidí agregar una variable personalizada y luego capturar esa variable durante pre_get_posts
para establecer el query_var post_per_page
:
function custom_query_vars_filter($vars) {
$vars[] = 'post_per_page_override';
return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );
add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {
if( $query->query_vars['post_per_page_override'] == '3') {
$query->set('posts_per_page', '3');
}
}
Luego fui más allá y lo hice obtener la cantidad exacta que deseas mostrar en la variable de consulta personalizada:
function custom_query_vars_filter($vars) {
$vars[] = 'post_per_page_override';
return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );
add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {
if( $query->query_vars['post_per_page_override']) {
$customPPPlimit = $query->query_vars['post_per_page_override'];
$query->set('posts_per_page', $customPPPlimit);
}
}
Funcionó para mí...

Si estás utilizando un bucle personalizado, simplemente especifica posts_per_page
, por ejemplo:
$query = new \WP_Query( [ 'posts_per_page' => 100 ] );
if ( $query->have_posts() ) {
......etc
Podrías establecer posts_per_page
en -1
para obtener posts ilimitados, pero esto es una muy mala práctica. En su lugar, establece la cantidad de posts que creas que tu servidor puede manejar sin colapsar, para que tu sitio no se caiga si se crean demasiados posts. 200 es un buen límite máximo.
De lo contrario, utiliza el filtro pre_get_posts
para modificar los parámetros pasados a las consultas:
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() ) {
return;
}
$query->set( 'posts_per_page', 100 );
}
Nota que esto establecerá todas las consultas a 100 páginas, incluyendo feeds, REST API, XMLRPC, etc.
Además, algunas personas recomendarán query_posts
, pero esto es una mala práctica y causará muchos otros problemas.
