Solución al problema de paginación de query_posts en WordPress
Si utilizan la función query_posts() en WordPress para obtener los posts que quieren mostrar en un página seguramente habrán notado (o no) que la páginación no funciona correctamente.
Por ejemplo si queremos mostrar todas las entradas excepto las de la categoría 45, nuestro código sería el siguiente:
< ?php
if (is_home()) {
query_posts("cat=-45");
}
?>
Si este código lo usamos para mostrar las entradas de la página principal, la paginación no funcionará. Para solucionar este problema simplemente debemos agregar el parámetro paged en la llamada a query_posts():
< ?php
if (is_home()) {
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("cat=-45&paged=$paged");
}
?>
El problema se debe a que query_posts() sobreescribe el valor del offset de página, es decir que WordPress ya no sabe en que página se encuentra. Para ello debemos volver a saber en que página nos encontramos, y eso lo hacemos a través del parámetro “paged”. Así, la llamada a get_query_var(‘paged’) nos devolverá 1 si estamos en la primer página o caso contrario el valor del atributo paged. Finalmente le decimos a query_posts() en que página estamos agregando el parámetro &paged=$paged.
Suerte!
Si te gustó el post, podés dejar tu comentario o suscribirte al feed para recibir los últimos artículos en tu email.
Comentarios
Me encantan estos comentarios que hablan al pedo. Si no te funcionó a vos no significa que esté mal. Te invito a leer estas tres páginas donde dan la misma solución que la planteada por mí, inclusive una es la doc oficial de WP. Template Tags/query posts, foro wordpress y query_posts Pagination problem
la verdad lo probe y no soluciona nada, debes atender mas a la hora de hablar de algo sino lo sabes bien
Pues a mi me funcionó, solo necesitaba excluir una categoría y saber si estaba en la pagina 1 o no
Un saludo desde la Mixteca
Aún no me funcionó pero seguramente le esté errando a algo.
La verdad que el comentario del amigo "fondos gratis" que nisiquiera da nombre, lamentable. Te recomiendo que le borres el link porque estás "promocionándole" gratis su sitio de mierda.
Saludos y gracias por el artículo.
Hola Felipe, use este codigo durante un tiempo, pero ahora me he dado cuenta que los post de la categoria que se quiere omitir del home, tan solo no desaparecen del mismo, sino tambien de las paginas subsiguientes, o sea las previas. Si bien es cierto se puede llegar a esos post por medio de la categoria, creo que este codigo esta a medias, no se si alguien ya reparo en eso.
En todo caso como hack rapido ayuda mucho.
Claro que van a desaparecer de las demás páginas, si el script de la página principal (index.php) en WordPress es el mismo para todas. Lo que podrías hacer es preguntar si estás en la primer página filtrar los posts de esa categoría, caso contrario mostrá todo. Podés probar con la función is_page(\\'1\\'). Se entiende?
A mí me anduvo joya.
<?php if (have_posts()) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("category_name=album&paged=$paged"); ?>
<?php while (have_posts()) : the_post(); ?>
<div class="album">
<div class="top"><small><?php the_time('d F Y'); ?></small></div>
<div class="content"><h1>">
<?php the_title(); ?></h1>
<?php the_content(); ?></div>
<div class="comm"><?php comments_popup_link('Sin comentarios »', '1 comentario »', '% comentarios »'); ?></div>
<div class="bottom"></div></div>
<?php endwhile; ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link('« Older Entries') ?></div>
<div class="alignright"><?php previous_posts_link('Newer Entries »') ?></div>
</div>
<?php else : ?>
<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.
<?php endif; ?>
Lo único que necesitaría que se muestren 5 post por página y como soy medio nabo con esto no consigo hacerlo, pero después, una barbaridá
Bah, era una tontera:
query_posts("category_name=albunes&paged=$paged&showposts=4"); ?>
muestra 4 post, que era lo que quería
saludos, yo tengo esto y no me funciona, me muestra todos los post:
query_posts("cat=-3,-29,-33,-16,-15,-1&paged=$page&posts_per_page=3"); ?>
q será???
a mi criterio te falta la "d" en la variable $paged
query_posts("cat=-3,-29,-33,-16,-15,-1&paged=$paged&posts_per_page=3"); ?>
Felipe mi tema no vino con paginación como haria para programar la paginación?
Si me explico un poco mejor mi tema no vino con el famoso entradas anteriores y entradas siguientes.
Instale el wp-paginavi, y si me muestra la figurita para dar clicks en las paginas que quiero, pero por ejemplo doy click en la pagina 4 y me vuelve a mostrar la pagina uno, pero en la barra de direcciones dice que esta en lapagina 4, pero no lo esta, probe con otro tema y ahi si funciona bien, el problema es el tema que no vino programado la paginacion.
Espero me puedas ayudar.
Para que vean como es el problema entren a mi blog y prueben ir a otra pagina y veran que no funciona :(
excelente man, estuve dos horas buscando por todo google y aqui encontre la respuesta, funciona de maravilla, gracias!!
he probado esta solucion de varias formas, no solo como se plantea aqui, pero sencillamente no resuelve el problema. El uso de $paged en este caso, es para no perder el numero de pagina, pero a pesar de la "correcta" paginacion sigue mostrando los mismos datos, es decir no cambia los datos obtenidos de la consulta SQL…lamentablemente no me ha funcionado y no logro dar con la solucion
Hola Cheche: veo que encontraste una solución a tu problema de paginacion. Te comento que en mi theme tampoco vino nada para que funcione el PAGENAVI y tengo el mismo problema que vos. ¿Me podrías decir como lo solucionaste?
Gracias
Vaya tio que buena…por fin!!! después de haber dado miles de cabezasos te he encontrado con la solución en la mano…!!!!
Y pensar a los miles de archivos, lineas de codigos que cambié, y ahora veo que es sólo una p#t@ linea….te agradezco por la ayuda porqué una info tan directa al problema no la habia econtrada…!!
Hola, fijate que inserte el codigo que tu expones aqui, modificando las IDS que deseo excluir las cuales son 3 y 4 y resulta que no pasa nada al actualizar el archivo del tema.
Te dejo mi index original por si me deseas ayudar, las ID´s que quiero excluir son las 3 y 4.
Aqui pegue el codigo PHP del index en copypastecode http://www.copypastecode.com/36526/
Gracas por su ayuda!
[...] en el, pero para mi desgracia, la paginacion no funcionaba, lo bueno fue que me encontre un post en http://elcofrecito.net, el cual me ilustro por que no [...]
Me encanta la gente agradecida, com fondos Gratis, que no sólo no tiene NPI si no que critica el buen trabajo de la página.
muchas gracias, estuve 2 noches sin poder lograrlo.
menos mal que di con esta solucion
se agradece un monton !!!
Comentarios cerrados
Me encantan estos comentarios que hablan al pedo. Si no te funcionó es una lastima, te invito a leer estas tres páginas donde dan la misma solución. Template Tags/query posts, foro wordpress y query_posts Pagination problem