Posted on 9 mai 2010 in Wordpress | 7 comments

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 :