Configuración de número de posts por página no funciona
OK, este es mi problema. Tengo una página de inicio estática y una página separada para posts en mi sitio WordPress. He definido ambas en el panel de administración. Además, he establecido el número máximo de posts a mostrar en 5 (en Ajustes > Lectura), pero todos los posts (10+) siguen apareciendo en la página del blog.
También estoy mostrando los últimos 3 posts en la página de inicio estática usando una consulta personalizada, es decir:
$wp_query = new WP_Query( array( 'posts_per_page' =>3));
<código del bucle de resultados>
Pero esta lista también está mostrando más de 3 posts. Parece que WordPress está ignorando el límite posts_per_page que establecí, ya sea en el panel de administración o mediante código. ¿Qué está pasando? Esta es mi primera vez usando WordPress para desarrollar un sitio. ¿Es este un problema común para principiantes?
EDITADO:
Acabo de simplificar al máximo la página de inicio estática y dejé solo un bloque básico de código que simplemente obtiene los títulos de los posts. Siguen apareciendo más de 3 posts. Este es el código actual (y único) en la página de inicio:
<div id="content">
<?php $wp_query = new WP_Query( array( 'posts_per_page' => 3) );?>
<?php if ( $wp_query->have_posts() ) : ?>
<ul>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<li>
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</li>
<?php endwhile;?>
</ul>
<?php endif; ?>
</div>

Quería añadir mi caso a esta lista ya que me tomó una eternidad depurarlo. Lo que sucede es que cambié el número de posts que muestra una página de archivo enganchándome al hook pre_get_post:
add_filter('pre_get_posts', 'number_of_posts_on_archive');
function number_of_posts_on_archive($query)
{
if(is_post_type_archive(array('post_type1', 'post_type2')))
{
$query->set('posts_per_page', 20);
}
return $query;
}
Y para solucionar el problema donde incluía la consulta de posts para un tipo de post completamente diferente, añadí algo como esto a la declaración if:
if( (is_post_type_archive(array('post_type1', 'post_type2'))) && ($query->get('post_type') !== 'post') )
{
....
}
La razón por la que lo publico aquí es que este es el primer resultado que apareció en la búsqueda de Google relacionada con lo que estaba buscando. Así que podría ayudar a alguien que no logra entender durante una hora... o dos por qué la consulta simplemente no quiere hacerle caso.

Esto podría ser causado por un tema o plugin que está sobrescribiendo la configuración de WordPress. Podrías intentar activar el tema TwentyEleven o TwentyTen, así como desactivar cualquier plugin, para ver si funciona entonces.
Si es así, podrías publicar qué tema estás utilizando (si es preconstruido) o qué plugins tuviste que desactivar para que funcione - y podemos ver qué se puede hacer para solucionarlo.

¡Gracias! Deshabilité el estúpido tema y funcionó. Lo obtuve de devpress.com (el tema news). Lo promocionan como un tema padre "avanzado" y advierten a los usuarios que no "toquen" nada. Supongo que con "avanzado" se referían a que está mal codificado, ya que todo lo que hice fue agregar el código para obtener publicaciones después de su elegante presentación de diapositivas.

//justo antes de llamar a tu código, agrega esto y personalízalo como prefieras
function hwl_home_pagesize( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( is_home() ) {
// Muestra solo 1 publicación para el archivo de blog original
$query->set( 'posts_per_page', 1 );
return;
}
if ( is_post_type_archive( 'movie' ) ) {
// Muestra 50 publicaciones para un tipo de publicación personalizado llamado 'movie'
$query->set( 'posts_per_page', 50 );
return;
}
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

N.Schipper tenía razón. Pero la única condición no es suficiente.
! is_admin()
Así, el número de publicaciones por página solo se cambiará en los ciclos necesarios y no afectará el área de administración.
if( (! is_admin()) && (is_post_type_archive(array('post_type1', 'post_type2'))) && ($query->get('post_type') !== 'post') )
{
{
$query->set( 'posts_per_page', 6 );
return;
}
}
