La Paginación de WordPress No Funciona - Siempre Muestra el Contenido de la Primera Página

10 jul 2013, 16:28:36
Vistas: 45.6K
Votos: 10

Estoy trabajando en un sitio web donde tengo un blog y también un tipo de entrada personalizada (custom post type) que me permite agregar algunos videos.

Me gustaría usar paginación para que si hay más de 9 videos mostrados, entonces ocurra la paginación.

La primera parte de esto funciona. Los videos están efectivamente limitados a 9 por página y la paginación aparece correctamente en la parte inferior.

Sin embargo, cuando hago clic en el enlace de la segunda página, aunque la URL cambia, se muestran los videos de la primera página.

Para mis entradas 'normales' del blog, la paginación funciona exactamente como se espera.

Este es el código actual que estoy usando para mi tipo de entrada personalizada:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Inicio del Bucle */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

Cualquier ayuda sería muy apreciada.

1
Comentarios

posible duplicado de ¿Cómo solucionar la paginación para bucles personalizados?

Chip Bennett Chip Bennett
31 oct 2013 16:36:09
Todas las respuestas a la pregunta 1
3
18

Por qué falla tu código actual

Siempre obtienes el contenido de la primera página, porque el string de parámetros pasado a query_posts al estar encapsulado en comillas simples evita que las variables (así como las secuencias de escape para caracteres especiales distintos a $) sean interpretadas.

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); resolvería ese problema.

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); también lo haría.

Y finalmente, pasar un array de argumentos mezclados en lugar de un string estilo consulta URL también funcionaría.

Dicho esto, no deberías usar query_posts en absoluto:

Cómo debería hacerse

Según tu comentario, intentaste usar get_posts.
Esa es una función muy útil, pero no es la forma correcta si quieres usar un WordPress-Loop después. get_posts devuelve un array de objetos de post - la propiedad posts del objeto WP_Query. Pero solo esa propiedad, sin todas las otras utilidades y métodos que WP_Query proporciona.

Por lo tanto, para seguir con tu fragmento de código, haz algo como esto:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* El Loop */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // hacer algo
        }
    } else {
        echo 'Lo siento, no se encontraron posts.';
    }
?>
10 jul 2013 16:36:43
Comentarios

Muchas gracias por eso, lectura interesante. Sin embargo, ¿podrías proporcionar la alternativa usando el método get_posts()?

¿Es tan simple como:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; get_posts("post_type=videos&posts_per_page=9&paged=$paged"); ?>

Eso en realidad no está funcionando para mí, pero podría ser por código en otra parte.

Johnny Johnny
10 jul 2013 17:13:21

Ver respuesta actualizada.

Johannes Pille Johannes Pille
10 jul 2013 18:58:12

Muchas gracias por tomarte el tiempo para mostrarme cómo usar esto. Realmente lo aprecio.

Johnny Johnny
11 jul 2013 00:35:33