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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!-- 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 -->
<!-- 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
2
3
<?php if ( is_single()): ?>
CODE ARTICLES MÊME RUBRIQUE/AUTEUR
<?php } ?>
<?php if ( is_single()): ?>
CODE ARTICLES MÊME RUBRIQUE/AUTEUR
<?php } ?>

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

1
2
<?php } elseif ( is_single()) { ?>
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!-- 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 -->
<!-- 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 :

Publicités

Publié par

Tikoun

Tikoun, créateur Web différent, c'est Barbara. Une conceptrice Web indépendante et spécialiste Wordpress qui travaille depuis Paris dans le monde entier, comme développeur informatique et se coupe en quatre pour vous faire gagner de l'argent via votre site web professionnel.

7 réflexions au sujet de « Afficher les titres des articles de la même catégorie ou du même auteur que l’article en cours dans WordPress »

  1. 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. 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

  3. Bonjour j’itilise cette fonction pour aficher la liste des articles d’une meme categories pendant la lecture d’un article( signle) donc le 1ier cas . mon souci est que j’ai une image avec le titre de chaue article. l’image est integrer dans l’article wordpress par une vaiable image. comment l’integrer dans l’appel des titre ci haut .
    Donc apelalnt un titre on a l’image qui va avec aussi ..?
    merci

  4. Bonjour,

    j’ai essayé ce code qui fonctionne parfaitement mais j’aurais voulu remplacer le titre de l’article par l’image à la une. J’ai bien réussi a faire apparaitre l’image mais le lien n’est pas associé à l’image en question.
    Si une âme charitable avait la solution ça me dépannerait beaucoup
    Merci par avance

  5. Bonjour votre code suivant fonctionne a merveille, genial merci a vous.


    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( $countID) {
    // maximum 100 titres mais vous pouvez adapter
    $count++;
    $categoryPosts .= ‘‘ . the_title( «  », «  », false ) . ‘‘;
    }
    }
    }
    $wp_query = $tempQuery;
    ?>

    Dans la même catégorie :

    Je souhaite rajouter l’image cliquable des articles donnés.Comment faite vous?Je pense que ca se passe ici :

    $categoryPosts .= ‘‘ . the_title( «  », «  », false ) . ‘‘;

    Merci d’avance pour votre reponse.

Laisser un commentaire