Solution pour faire cohabiter Query Posts et votre pagination WordPress
by David LOUIS on juil 21, 2010 • 8 h 37 min • 18 365 views14 commentairesSi vous utilisez la fonction query_post sur WordPress, vous avez du sûrement être confronté au fameux problème de navigation. Pour celles et ceux qui ne connaissent pas cette fonction, un petit rappel : elle permet d’afficher sur votre blog wordpress un certains nombre d’articles en fonction de critères comme le nombre, la catégorie, l’ordre, etc… Pour plus d’infos sur query_posts,
je vous conseille l’article de WebInventif. Cette fonction très utile a un soucis. En effet, la pagination ne joue plus son rôle.
Des propositions ont été apporté sur le blog de Fran6art concernant l’utilisation de wp-page navi ou dernièrement par WordPress Channel, mais malheureusement pour moi sans succès.
Et puis, enfin, j’ai trouvé une solution..
Ce que je vais vous proposer fonctionne parfaitement que vous utilisiez simplement le système de pagination de wordpress posts_nav_link(); ou avec le plugin wp-Pagenavi. Je pars du principe que vous savez utiliser cette fonction, nous allons nous concentre sur le code pour la pagination. Imaginons que vous désirez afficher les 4 derniers billets de la catégorie « motion ». On va insérer :
-
< ?php query_posts('showposts=4&category_name=motion'); ?>
-
< ?php while (have_posts()) : the_post(); ?>
-
< ?php endwhile; ?>
Donc nous aurons bien nos 4 derniers billets de la catégorie motion. Mais si nous avons déjà publié par exemple 8 billets sur cette catégorie et que nous voulons permettre au lecteur d’accéder aux autres billets de la catégorie « motion » par un système de navigation, la page 2 de la navigation affichera à nouveau les mêmes billets et pas les 4 plus anciens. En effet, lorsque l’on clique sur le 2 de la navigation, l’URL se transforme bien en la page 2, mais les articles sont toujours les mêmes. Pour y remédier, il va falloir insérer un « $query_string ». Voilà ce que cela donne :
-
< ?php query_posts($query_string . 'showposts=4&category_name=motion'); ?>
-
< ?php while (have_posts()) : the_post(); ?>
-
< ?php endwhile; ?>
Ce n’est pas plus compliqué que cela
David LOUIS
Directeur chez Webset, Organisme de formation professionnelle pour les métiers de la culture, du spectacle vivant, Consultant web 2.0, adepte du DIY et du Coworking
More Posts - Website - Twitter - Facebook
Articles similaires
10 novembre 2011 -- Freelance, déjà un an ! (5)
C'est en relisant mon Business plan pour ma nouvelle société de formation que je réalise aujourd'hui qu'il y a un peu plus d'un an, j'enregistrais sur le web mon activité d'auto-entrepreneur sous ...13 décembre 2010 -- Tuto vidéo : Synchroniser en local ses bases de données Wordpress avec Dropbox (9)
[vimeo 13819658] Nous allons voir comment synchroniser nos blogs Wordpress (ça pourrait être Joomla ou Drupal..), lorsque l’on travaille préalablement en local, sur deux macs. Pour être concret, je...2 mars 2010 -- Tuto vidéo : ce qu’il faut faire quand votre blog wordpress a une erreur 500 (4)
[vimeo 9852794] Ce tutoriel vidéo va vous montrer les manip à faire lorsque votre blog wordpress a une erreur 500. Bien souvent, votre blog est hébergé chez 1&1 et vous devrez modifier votre fi...
14 comments
Crunch says:
juil 21, 2010
Sinon, j’utilise la technique du paged=$paged, ce qui donne avec ton exemple :
Crunch says:
juil 21, 2010
Arf le code n’a pas voulu passer dans mon commentaire … J’enlève les balises php dans ce cas :
if (have_posts()) :
query_posts(« showposts=4&category_name=motion&paged=$paged »);
while (have_posts()) : the_post();
Mickaël says:
fév 19, 2012
Juste un énorme merci pour le &paged=$paged !
camikat says:
juil 21, 2010
Bien joué David !Et explications limpides, un GRAND plus pour la fonction « query_post » à garder sous le coude Merci
David says:
juil 21, 2010
Crucnch -> Merci pour ce complément d’info mais je crois que c’est ce que propose Fran6art et ça ne marchait pas chez moi
Mais je vais faire un test avec ta solution, et je donnerais des news
Camikat -> Merci pour le petit mot
David says:
juil 21, 2010
Crunch -> Je viens d’essayer sur mon blog de test et ça ne marche pas
Crunch says:
juil 21, 2010
@David : Ha oui en effet, c’est presque le même code mais le sien a quelques lignes de plus … En tout cas de mon côté ça fonctionne parfaitement avec les galeries des thèmes sur Thèmes-PSP … Chaque cas est différent hein ! Tu as trouvé ta solution et c’est le principal
David says:
juil 21, 2010
Crunch -> Oui le principal est d’avoir un max de solutions
Aurélien Denis says:
juil 22, 2010
Hello !
Merci de la citation, j’espère que vous trouverez une solution à votre problème.
Sébastien | archiparmentier wordpressdesign says:
juil 23, 2010
« query_post » est censé venir avant « if (have_posts()) : » et non après
David says:
juil 25, 2010
Sébastien -> Je ne pense pas que ça a une énorme incidence, si oui, tu peux approfondir ?
Heilios says:
jan 3, 2011
Solution qui marche au top pour moi merci beaucoup
Raphaël says:
sept 29, 2011
Merci beaucoup !!
Jean-Marc MILHAUD says:
sept 6, 2013
dans la solution proposée par fran6art, il y a une erreur, je pense. La ligne :
query_posts(« showposts=4&cat=-9&paged=$paged »);
doit être remplacée par:
query_posts(« showposts=4&cat=-9&paged= ».$paged);