La Paginación de WordPress No Funciona - Siempre Muestra el Contenido de la Primera Página
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.

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");
sí 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.';
}
?>

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.
