Página de archivo... limitando entradas por página

17 mar 2015, 22:31:26
Vistas: 20.9K
Votos: 4

He creado un tipo de entrada personalizada 'testimonials' y configuré la opción "has archive" como "true" y tengo un archivo de plantilla PHP llamado "archive-testimonials.php".

Lo que quiero hacer es limitar el número de entradas mostradas a solo 5 con una opción de siguiente y anterior para ir hacia adelante y atrás entre los siguientes 5. Suena bastante fácil pero por alguna razón no puedo hacer que funcione.

Aquí está mi bucle que me muestra todas las 17 entradas de testimonios:

<?php $loop = new WP_Query( array( 'pagename' => 'testimonials', 'posts_per_page' => -1 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
    <?php the_content(); ?>
   </div>
 <?php endwhile; ?>

La única forma en que mostrará todos en lugar de solo 10 es con 'posts_per_page' => -1. E incluso sin ese "posts_per_page" solo mostrará 10 de las 17 entradas.

Ahora he intentado:

<?php $loop = new WP_Query( array( 'post_type' => 'testimonials', 'posts_per_page' => 5 ) ); ?>
<?php previous_posts_link(); ?> &bull; <?php next_posts_link(); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
  <div>
    <h2><?php the_title(); ?></h2>
     <?php the_content(); ?>
  </div>
<?php endwhile; ?>

Puedo hacer que muestre solo cinco pero no tengo paginación para los siguientes 5. Simplemente abre "testimonials/page/2/" y muestra los mismos cinco que la página anterior.

¿Qué estoy haciendo mal? Cualquier ayuda es muy apreciada.

Gracias

0
Todas las respuestas a la pregunta 1
1
19

No crees una nueva consulta y bucle solo para alterar las publicaciones por página. Añade una función enganchada a pre_get_posts y modifica los parámetros que desees antes de que se ejecute la consulta. Esto iría en el archivo functions.php de tu tema o en un plugin.

function wpd_testimonials_query( $query ){
    if( ! is_admin()
        && $query->is_post_type_archive( 'testimonials' )
        && $query->is_main_query() ){
            $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'wpd_testimonials_query' );

Luego, en la plantilla, ejecutas el bucle normal y la paginación funciona como se espera.

17 mar 2015 22:54:28
Comentarios

Funcionó perfectamente. No soy nuevo en WordPress, pero no estoy ni cerca de ser tan avanzado como otros. Esto era algo con lo que estaba luchando ayer y no podía hacerlo funcionar. Pero acabo de aprender algo nuevo... Gracias por enseñarme.

agon024 agon024
18 mar 2015 16:14:52