Lashon WordPress Langage

Conseils d'un concepteur de sites et Tutoriaux Wordpress

Afficher les titres des articles de la même catégorie ou du même auteur que l’article en cours dans WordPress

navigation des articles rubrique en cours

Afficher les sujets similaires avec une navigation vers les articles de la même rubrique ou du même auteur

Réalisons un petit encart à mettre sous votre article ou dans votre sidebar qui affichera les articles récents de la même catégorie et / ou du même auteur que l’article affiché. Vous choisirez le nombre d’articles listés (tous ou les 5 derniers par exemple). On peut réaliser la chose facilement et sans widget.  Nos caprices d’affichage trouvent toujours une solution avec la magique fonction query_post. Vous voyez bien que l’on peut tout faire avec WordPress. :-)

Ceci est une adaptation de l’article de Darrenhoyt (en anglais)

Afficher les titres des articles de la même catégorie dans single.php

Ce bout de code peut aller n’importe où dans vos Templates. Par exemple collez-le sous la boucle de votre article, soit dans single.php.Par exemple juste avant :

  1. <?php comments_template( '', true ); ?>
<?php comments_template( '', true ); ?>

Collez :

  1. <!-- Encart afficher titres articles de la même catégorie -->
  2. <?php
  3.   //Obtenir la catégorie
  4.   global $wp_query;
  5. $cats = get_the_category();
  6.   $postAuthor = $wp_query->post->post_author;
  7. $tempQuery = $wp_query;
  8.   $currentId = $post->ID;
  9.  
  10. // La catégorie du billet affiché
  11.   $catlist = "";
  12.   forEach( $cats as $c ) {
  13.   if( $catlist != "" ) { $catlist .= ","; }
  14.   $catlist .= $c->cat_ID;
  15.   }
  16.   $newQuery = "posts_per_page=100&cat=" . $catlist;
  17. //Choisir un nombre qui sera le nombre moins un (10 pour afficher 9 titres)
  18.   query_posts( $newQuery );
  19. $categoryPosts = "";
  20.   $count = 0;
  21. if (have_posts()) {
  22.   while (have_posts()) {
  23.   the_post();
  24.   if( $count<100 && $currentId!=$post->ID) {
  25.   // maximum 100 titres mais vous pouvez adapter
  26.   $count++;
  27.   $categoryPosts .= '<li><a href="' . get_permalink() . '">' . the_title( "", "", false ) . '</a></li>';
  28.   }
  29.   }
  30.   }
  31.   $wp_query = $tempQuery;
  32.   ?>
  33.  
  34.   <h2 class="widget-title">Dans la même catégorie :</h2>
  35. <ul class="widget-container">
  36. <?php echo $categoryPosts; ?>
  37. </ul>
  38. <!-- fin encart afficher titres articles de la même catégorie en cours -->
<!-- Encart afficher titres articles de la même catégorie -->
<?php
  //Obtenir la catégorie
  global $wp_query;
$cats = get_the_category();
  $postAuthor = $wp_query->post->post_author;
$tempQuery = $wp_query;
  $currentId = $post->ID;

// La catégorie du billet affiché
  $catlist = "";
  forEach( $cats as $c ) {
  if( $catlist != "" ) { $catlist .= ","; }
  $catlist .= $c->cat_ID;
  }
  $newQuery = "posts_per_page=100&cat=" . $catlist;
//Choisir un nombre qui sera le nombre moins un (10 pour afficher 9 titres)
  query_posts( $newQuery );
$categoryPosts = "";
  $count = 0;
if (have_posts()) {
  while (have_posts()) {
  the_post();
  if( $count<100 && $currentId!=$post->ID) {
  // maximum 100 titres mais vous pouvez adapter
  $count++;
  $categoryPosts .= '<li><a href="' . get_permalink() . '">' . the_title( "", "", false ) . '</a></li>';
  }
  }
  }
  $wp_query = $tempQuery;
  ?>

  <h2 class="widget-title">Dans la même catégorie :</h2>
<ul class="widget-container">
<?php echo $categoryPosts; ?>
</ul>
<!-- fin encart afficher titres articles de la même catégorie en cours -->

Adaptez la classe css selon votre template.

Ajustez le nombre d’articles récents de la catégorie en cours que vous désirez afficher (dans l’exemple ci-dessus ce nombre est 20).

Afficher les titres des articles de la même catégorie dans la sidebar

C’est le même code. Mais selon votre sidebar vous devrez préciser une condition du type ‘si article’ en haut du code précédent afin que l’encart n’apparaisse que lors de l’affichage d’un article. Donc selon les cas vous devrez utiliser l’une de ces configurations suivantes. Par exemple pour le thème par défaut, TwentyTen depuis la version WP 3., placez votre code juste sous:

  1. <div id="primary" class="widget-area">
<div id="primary" class="widget-area">

La version la plus courante et recommandée est :

  1. <?php if ( is_single()): ?>
  2. CODE ARTICLES MÊME RUBRIQUE/AUTEUR
  3. <?php } ?>
<?php if ( is_single()): ?>
CODE ARTICLES MÊME RUBRIQUE/AUTEUR
<?php } ?>

Mais votre sidebar comporte déjà des tags conditionnels :

  1. <?php } elseif ( is_single()) { ?>
  2. CODE ARTICLES MÊME RUBRIQUE/AUTEUR
<?php } elseif ( is_single()) { ?>
CODE ARTICLES MÊME RUBRIQUE/AUTEUR

Adaptez la classe css selon les classes indiquées dans votre functions.php pour les widgets ou votre sidebar.php

Vous pouvez évidement aussi mettre cet encart ailleurs que dans la sidebar.

Afficher les titres des articles du même rédacteur

De la même manière, si vous êtes plusieurs rédacteurs vous serez peut être intéressés d’afficher également tous les articles d’un auteur et selon la catégorie en cours.

  1. <!-- Encart afficher titres articles de la même catégorie -->
  2. <?php
  3.   //Obtenir la catégorie
  4.   global $wp_query;
  5. $cats = get_the_category();
  6.   $postAuthor = $wp_query->post->post_author;
  7. $tempQuery = $wp_query;
  8.   $currentId = $post->ID;
  9.  
  10. // Les billets du même auteur
  11.   $newQuery = "posts_per_page=5&author=" . $authorPosts;
  12.     // CHOISIR le nombre de posts à afficher, laisser vide pour tous
  13.     //ou choisir un nombre qui sera le nombre moins un (5 pour afficher 4 titres)
  14.   query_posts( $newQuery );
  15. $authorPosts = "";
  16.   $count = 0;
  17. if (have_posts()) {
  18.   while (have_posts()) {
  19.   $count++;
  20.   the_post();
  21.   if( $count<100 && $currentId!=$post->ID) {
  22.     // maximum 100 titres mais vous pouvez adapter
  23.   $count++;
  24.   $authorPosts .= '<li><a href="' . get_permalink() . '">' . the_title( "", "", false ) . '</a></li>';
  25.   }
  26.   }
  27.   }
  28.  
  29. // La catégorie du billet affiché
  30.   $catlist = "";
  31.   forEach( $cats as $c ) {
  32.   if( $catlist != "" ) { $catlist .= ","; }
  33.   $catlist .= $c->cat_ID;
  34.   }
  35.   $newQuery = "posts_per_page=&cat=" . $catlist;
  36.     // CHOISIR le nombre de posts à afficher, laisser vide pour tous (comme ici)
  37.     //ou choisir un nombre qui sera le nombre moins un (5 pour ici afficher 4 titres)
  38.   query_posts( $newQuery );
  39. $categoryPosts = "";
  40.   $count = 0;
  41. if (have_posts()) {
  42.   while (have_posts()) {
  43.   the_post();
  44.   if( $count<100 && $currentId!=$post->ID) {
  45.   // maximum 100 titres mais vous pouvez adapter
  46.   $count++;
  47.   $categoryPosts .= '<li><a href="' . get_permalink() . '">' . the_title( "", "", false ) . '</a></li>';
  48.   }
  49.   }
  50.   }
  51.   $wp_query = $tempQuery;
  52.   ?>
  53.  
  54.   <h2 class="widget-title">Dans la même catégorie :</h2>
  55. <ul class="widget-container">
  56. <?php echo $categoryPosts; ?>
  57. </ul>
  58.  <h2 class="widget-title">Du même auteur :</h2>
  59. <ul class="widget-container">
  60. <?php echo $authorPosts; ?>
  61. </ul>
  62. <!-- fin encart afficher titres articles de la même catégorie en cours -->
<!-- Encart afficher titres articles de la même catégorie -->
<?php
  //Obtenir la catégorie
  global $wp_query;
$cats = get_the_category();
  $postAuthor = $wp_query->post->post_author;
$tempQuery = $wp_query;
  $currentId = $post->ID;

// Les billets du même auteur
  $newQuery = "posts_per_page=5&author=" . $authorPosts;
	// CHOISIR le nombre de posts à afficher, laisser vide pour tous
	//ou choisir un nombre qui sera le nombre moins un (5 pour afficher 4 titres)
  query_posts( $newQuery );
$authorPosts = "";
  $count = 0;
if (have_posts()) {
  while (have_posts()) {
  $count++;
  the_post();
  if( $count<100 && $currentId!=$post->ID) {
    // maximum 100 titres mais vous pouvez adapter
  $count++;
  $authorPosts .= '<li><a href="' . get_permalink() . '">' . the_title( "", "", false ) . '</a></li>';
  }
  }
  }

// La catégorie du billet affiché
  $catlist = "";
  forEach( $cats as $c ) {
  if( $catlist != "" ) { $catlist .= ","; }
  $catlist .= $c->cat_ID;
  }
  $newQuery = "posts_per_page=&cat=" . $catlist;
	// CHOISIR le nombre de posts à afficher, laisser vide pour tous (comme ici)
	//ou choisir un nombre qui sera le nombre moins un (5 pour ici afficher 4 titres)
  query_posts( $newQuery );
$categoryPosts = "";
  $count = 0;
if (have_posts()) {
  while (have_posts()) {
  the_post();
  if( $count<100 && $currentId!=$post->ID) {
  // maximum 100 titres mais vous pouvez adapter
  $count++;
  $categoryPosts .= '<li><a href="' . get_permalink() . '">' . the_title( "", "", false ) . '</a></li>';
  }
  }
  }
  $wp_query = $tempQuery;
  ?>

  <h2 class="widget-title">Dans la même catégorie :</h2>
<ul class="widget-container">
<?php echo $categoryPosts; ?>
</ul>
 <h2 class="widget-title">Du même auteur :</h2>
<ul class="widget-container">
<?php echo $authorPosts; ?>
</ul>
<!-- fin encart afficher titres articles de la même catégorie en cours -->

Sources pour ce tuto :

WestHost Web Hosting
Tags: , , ,
Posté dans Astuces WP | Marqué , , , | 3 Commentaires

3 Réactions à Afficher les titres des articles de la même catégorie ou du même auteur que l’article en cours dans WordPress

  1. Claire dit:

    Bonjour !

    Tout d’abord merci pour cet article qui m’a été fort utile dans la construction d’un site pour quelqu’un.
    Par contre je ne parviens pas à saisir ce passage « afin que l’encart n’apparaisse que lors de l’affichage d’un article. »

    Et le code :

    CODE ARTICLES MÊME RUBRIQUE/AUTEUR

    Que suis-je censé mettre à la place de « code articles même rubrique » ?

    D’avance merci pour une éventuelle réponse !

    Cordialement.

  2. arn0 dit:

    Bonjour je me tourne vers vous car voila j’essaie d’utiliser cela pour mettre les articles du même auteur sur wordpress 3.3.1 est cela me fausse tout le système de commentaire.Des que j’envoie un commentaire sur le site je suis renvoyer sur un autre article et tout le système de comptage de commentaire est faussé.
    Par avance merci a vous

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">