Si 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 if (have_posts()) : ?>
  1. &lt; ?php query_posts('showposts=4&amp;category_name=motion'); ?&gt;
  2. &lt; ?php while (have_posts()) : the_post(); ?&gt;
  3. &lt; ?php endwhile; ?&gt;

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 if (have_posts()) : ?>
  1. &lt; ?php query_posts($query_string . 'showposts=4&amp;category_name=motion'); ?&gt;
  2. &lt; ?php while (have_posts()) : the_post(); ?&gt;
  3. &lt; ?php endwhile; ?&gt;

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