La fonction query_posts() est utile pour contrôler quels articles doivent être affichés dans la boucle de WordPress. Malgré les nombreux paramètres disponibles, un problème récurent concerne la pagination qui ne fonctionne pas… les articles se répétant d’une page sur l’autre.
Problème constaté
Si on utilise la fonction query_posts() pour, par exemple, lister l’ensemble des articles de votre blog sur une page d’archives, un problème gênant survient. Les articles listés sur la première page sont les mêmes sur la seconde page et ainsi de suite : la pagination ne fonctionne plus !
Solution fonctionnelle
Le codex de WordPress n’est pas très clair à ce sujet. Or, il faut ajouter un paramètre supplémentaire dans votre requête pour obtenir une pagination de nouveau opérationnelle.
Ainsi, les lignes de code suivantes permettent de lister 50 articles par pages via l’argument posts_per_page.
<?php if (have_posts()) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts("posts_per_page=50&paged=$paged"); ?>
<?php while (have_posts()) : the_post(); ?>
<ul>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
</ul>
<?php endwhile; ?>
Ce bout de code peut être utilisé pour lister vos articles sur une page de catégorie à raison de 50 par page dans cet exemple.
Notez que le lignes comprises entre <?php while (have_posts()) : the_post(); ?> et <?php endwhile; ?> contiennent la boucle. En termes simples, il s’agit de déterminer la façon dont seront affichés les éléments de la requête.
Dans cet exemple, j’utilise une liste à puces pour afficher chaque titre d’articles conformément à ma requête consistant à lister 50 articles par pages.
Une autre solution m’a été proposée par Francis Chouquet sur son blog Fran6art. Elle fait le lien avec le plugin WP-pagenavi. Les 2 approches sont normalement fonctionnelles avec le plugin de pagination… mais 2 méthodes valent toujours mieux qu’une !
La fonction query_posts() est décidément très puissante et il n’est pas aisée de la manipuler. Grâce à ce bout de code, vous ne devriez plus rencontrer de problèmes avec la pagination.
Crédits photo : amortize

Bonjour,
Merci pour ce tutoriel qui m’a été bien utile pour créer la page d’archives de mon photoblog.
Par contre, pour que cela fonctionne j’ai du enlever cette ligne :
<?php if (have_posts()) : ?>sinon j’avais une erreur PHP.
Malheureusement, le bout de code n’est pas passé dans ton commentaire. Pourrez-tu me l’envoyer par e-mail pour que je puisse le publier ?
Merci !
email envoyé mais pas reçu ? Pour info c’est la première ligne du code que j’ai supprimé pour que cela fonctionne.
Encore merci
C’est bon je viens d’éditer le commentaire.
Je n’avais pu que tu m’avais envoyé un e-mail… faut que j’améliore mon système de messagerie !
A bientôt !
Bizarrement, ta méthode et celle de Francis ne marche pas pour moi. Si vous êtes dans le même cas, je vous invite à utiliser les query strings comme expliqué ici : http://www.wordpress-fr.net/support/sujet-17260-aide-query-post
Merci du lien ! Ça devrait aider d’autres personnes.
Salut aurélien,
mais de rien
Ping : Solution pour faire cohabiter Query Posts et votre pagination Wordpress
Salut Aurélien,
J’ai aussi ce problème, mais j’ai pas su où mettre ton bout de code.
Merci d’avance de ta réponse
Il faut que tu localises ton fonction query_posts et que tu y ajoutes le paramètre posts_per_page.
Mon index.php est totalement vide (si si), c’est pour ça que j’ai galéré à trouver..
Mais le comble, c’est que j’ai trouvé:
Déja fait.. mais ça ne marche toujours pas..
Pas d’idées?
Driss.Slaoui sur Skype si tu peux m’aider pour 5 petites minutes
A priori, le code n’est pas passé… mais je trouve bizarre que ton index.php soit vide. Le code doit être inséré en HTML converti pour qu’il passe correctement ou entre des balises
preoucode.Deuxièmement, ce tutoriel s’applique aux personnes qui rencontrent des problèmes avec la fonction query_posts au sujet de la pagination. Est-ce vraiment ton cas ?
Pour Skype, désolé mais je l’utilise uniquement à but professionnel et non pour faire du dépannage gratuit. Il y a le forum de WordPress francophone pour cela. Je ne cherche pas à m’y substituer.
Ping : Solution pour faire cohabiter Query Posts et votre pagination Wordpress | davidlouis.fr
Bonjour
Sur la home de info2tele.com, je fait apparaitre les 10 derniers post et je voudrais installer une pagination (page suivante – page précédente).
Malheureusement, je ne comprends pas comment mettre en place cette fonction.
Est-ce que pourrais m’aider ? Je place ci-dessous le code index.php
Merci pour ton aide.
have_posts()) : $recent->the_post();?>
<a class="left_posts_link" href=" » rel= »bookmark »>
<a href=" » class= »left_posts_link » rel= »bookmark »> <?php
$files = get_children("post_parent=$id&post_type=attachment&post_mime_type=image");
if ($files) {
$keys = array_keys($files);
$num=$keys[0];
$thumb=wp_get_attachment_url($num);
$blogurl = get_bloginfo('template_url');
$permalink = get_permalink();
$title = get_the_title();
print ' ‘;
}
?>
<?php
$excerpt = get_the_excerpt();
echo string_limit_words($excerpt, 15);
echo "… lire la suite »;
?>
<a href=" »>
…
have_posts()) : $recent->the_post();?>
<a class="left_posts_link1" href=" » rel= »bookmark »>
<a href=" » class= »left_posts_link1″ rel= »bookmark »> <?php
$files = get_children("post_parent=$id&post_type=attachment&post_mime_type=image");
if ($files) {
$keys = array_keys($files);
$num=$keys[0];
$thumb=wp_get_attachment_url($num);
$blogurl = get_bloginfo('template_url');
$permalink = get_permalink();
$title = get_the_title();
print ' ‘;
}
?>
<?php
$excerpt = get_the_excerpt();
echo string_limit_words($excerpt, 15);
echo "… lire la suite »;
?>
<a href=" »>
…
have_posts()) : $recent->the_post();?>
<a title="Permanent Link to » href= »" rel= »bookmark »><a href=" » class= »left_posts_link » rel= »bookmark »>
<?php
$files = get_children("post_parent=$id&post_type=attachment&post_mime_type=image");
if ($files) {
$keys = array_keys($files);
$num=$keys[0];
$thumb=wp_get_attachment_url($num);
print " »;
}
?>
<div class="photogallery_title" id="post- »>
<a title="Permanent Link to » href= »" rel= »bookmark »>
have_posts()) : $recent->the_post();?>
<a class="titleshome" title="Permanent Link to » href= »" rel= »bookmark »>
<?php
$files = get_children("post_parent=$id&post_type=attachment&post_mime_type=image");
if ($files) {
$keys = array_keys($files);
$num=$keys[0];
$thumb=wp_get_attachment_url($num);
$blogurl = get_bloginfo('template_url');
$permalink = get_permalink();
$title = get_the_title();
print ' ‘;
}
?>
<?php
$excerpt = get_the_excerpt();
echo string_limit_words($excerpt, 30);
echo "… lire la suite »;
?>
<a href=" » />.
Vu que tu n’utilises pas la fonction
query_posts, je pense qu’en insérant une fonction de pagination cela devrait fonctionner. Passes par le plugin WP Page-navi.Merci , ça marche parfaitement
J’ai choisi un thème un peu particulier » original premium news « . Je ne parviens pas à faire fonctionner pagenavi,la fonction query_posts() prend toujours le dessus en faveur de la page archives.
voilà le code de la page blog qui est appelée par l’index:
have_posts()) : $the_query->the_post(); $do_not_duplicate = $post->ID;
?>
<div class="post-alt blog" >
<a title=" » href= »" rel= »bookmark »>
<?php the_content('’.__(‘à suivre’,woothemes). »); ?>
>
Merci de votre aide
Oups.. je me suis trompé de code, l’autre c’est ma page index, voilà la page Blog:
have_posts()) : $the_query->the_post(); $do_not_duplicate = $post->ID;
?>
<div class="post-alt blog" >
<a title=" » href= »" rel= »bookmark »>
<?php the_content('’.__(‘à suivre’,woothemes). »); ?>
>
je ne peux malheureusement pas offrir un support technique pour des thèmes premium. Pour cela, merci de contacter l’auteur du thème ou d’utiliser un forum approprié.
Super
Merci pour ce bout de code. très simple mais encore faut-il le savoir.
Salut,
merci pour cette astuce qui n’a pas marcher pour moi, mais avec l’aides des commentaires plus bas, voci le résultat qui fonctionne dans mon cas.
</code
Désolé code non fonctionnel…
Comme ça peux être que ça marche
<?php
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1; query_posts("cat=4&posts_per_page=5&order=DESC&orderby=date&paged=$paged");
while (have_posts()) : the_post(); mystique_post();
endwhile;
?>
<?php mystique_pagenavi(); ?>
Plutôt que de bêtement passer par un plugin, la pagination peut se faire très facilement avec la fonction pagination_links, (notamment). Un tutoriel pour remplacer wp_pagenavi ici. Quant au thème de mon blog principal, je n’utilise même pas ce type de pagination.
J’ai préféré une autre méthode : global $query_string; query_posts($query_string . ‘&posts_per_page=50′)… Voili, voilou. Visitez une page d’archives de mon blog, et vous verrez que je l’utilise même plusieurs fois, avec la valeur offset. Est-ce la meilleure méthode ? Je ne sais pas, mais elle fonctionne vraiment comme je le voulais.
Tu peux m’indiquer une page de ton site avec la pagination en action ?
Je viens de regarder ton article et je me demande comment j’ai pu passer à côté de cette fonction pendant autant de temps… j’aimerais donc tester pour identifier les avantages et les inconvénients par rapport à WordPress PageNavi.