Paginación con 5 entradas por página

10 dic 2015, 15:53:03
Vistas: 41.3K
Votos: 3

Estoy tratando de crear una lista paginada de entradas, y he usado el Codex para escribir algo de código pero parece que estoy haciendo algo mal.

Estos son mis argumentos de wp_query

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
            $the_query = new WP_Query(
                array
                    (
                        'posts_per_page' => 5,
                        'post_type' => 'post',
                        'paged' => $paged
                    )
            );

El contenido de $paged se muestra como 1 lo cual sería lo esperado

He añadido next_posts_link a mi sentencia if pero no se muestran.

if ( $the_query->have_posts() ) {
                previous_posts_link( '« Entradas más recientes' );
                while ( $the_query->have_posts() ) {
                    $the_query->the_post();
                    echo '<div class="news-item">';
                        // código de la entrada aquí
                    echo '</div>';
                }
                next_posts_link( 'Entradas anteriores »', 0 );
            }

EDICIÓN

La página donde se muestra esto no es una página principal, sino una página estática que creé. Creé una plantilla page-news.php y luego creé una página llamada 'Noticias' y ahí es donde reside este código. ¿Podría ser esa la razón?

1
Comentarios

Posible duplicado de The next_posts_link() me muestra una página adicional en blanco

Pieter Goosen Pieter Goosen
10 dic 2015 17:52:16
Todas las respuestas a la pregunta 1
7

Esto me funciona en una sola página usando una plantilla. Solo asegúrate de configurar next_posts_link( 'Entradas más antiguas »', $the_query->max_num_pages );.

// establece el parámetro "paged" (usa 'page' si la consulta está en una página frontal estática)
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1';
$args = array (
    'nopaging'               => false,
    'paged'                  => $paged,
    'posts_per_page'         => '5',
    'post_type'              => 'post',
);

// La Consulta
$query = new WP_Query( $args );

// El Bucle
if ( $query->have_posts() ) {

    previous_posts_link( '« Entradas más recientes' );

    while ( $query->have_posts() ) {
        $query->the_post();
        echo '<div class="news-item">';
            // contenido del post aquí
                echo '<h1 class="page-title screen-reader-text">' . the_title() . '</h1>';
        echo '</div>';
    }

    next_posts_link( 'Entradas más antiguas »', $query->max_num_pages );

} else {
    // no se encontraron posts
    echo '<h1 class="page-title screen-reader-text">No se encontraron entradas</h1>';
}

// Restaurar los datos originales del Post
wp_reset_postdata();
10 dic 2015 16:47:30
Comentarios

La página donde esto aparece no es una página principal, sino una página estática que creé. Creé una plantilla page-news.php y luego creé una página llamada 'Noticias' y ahí es donde reside este código. ¿Podría ser esa la razón?

user1486133 user1486133
10 dic 2015 16:48:21

¿Qué cambios has hecho en mi código? No puedo encontrar el cambio.

user1486133 user1486133
10 dic 2015 16:49:28

Estaba probando en la página principal fuera del bucle principal, probaré esto en una página estática y te aviso si hay alguna diferencia.

jgraup jgraup
10 dic 2015 16:51:27

Parece que sí desaparece cuando colocas esto dentro de una plantilla. Ahora que tengo un ejemplo funcional puedo probar más, un momento.

jgraup jgraup
10 dic 2015 16:54:56

¿Y esto hace que tu respuesta sea diferente a la mía.....???????

Pieter Goosen Pieter Goosen
10 dic 2015 17:00:11

@user1486133, esto está funcionando perfectamente ahora. Solo agrega $the_query->max_num_pages a tu next_posts_link en lugar de 0.

jgraup jgraup
10 dic 2015 17:02:33

@jgraup gracias, sí esta fue la solución correcta. Gracias por presentarla y por no ser condescendiente en el proceso :)

user1486133 user1486133
10 dic 2015 17:38:49
Mostrar los 2 comentarios restantes