Configuración de número de posts por página no funciona

16 ene 2012, 17:08:30
Vistas: 18.7K
Votos: 3

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>
2
Comentarios

Según el código que has incluido, has hecho todo correctamente, ¿podrías mostrar un poco más del código para ayudar a encontrar dónde está el error?

mor7ifer mor7ifer
16 ene 2012 17:15:35

esto no necesariamente tiene que ver con tu problema, pero deberías usar alguna variable diferente a $wp_query para tus consultas personalizadas, esa es la variable global que WordPress usa para el bucle principal, y podrías obtener resultados impredecibles si la usas para otros propósitos.

Milo Milo
16 ene 2012 19:10:07
Todas las respuestas a la pregunta 4
0

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.

3 sept 2014 22:52:05
1

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.

16 ene 2012 18:58:57
Comentarios

¡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.

JCoder JCoder
16 ene 2012 20:33:46
1
//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 );
14 jul 2013 12:18:13
Comentarios

Por favor agrega una explicación a tu respuesta: ¿por qué eso podría resolver el problema?

fuxia fuxia
4 feb 2014 00:50:20
0

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;
}
}
9 dic 2017 18:07:57