
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 :
<?php comments_template( '', true ); ?>
Collez :
<!-- 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:
<div id="primary" class="widget-area">
La version la plus courante et recommandée est :
<?php if ( is_single()): ?> CODE ARTICLES MÊME RUBRIQUE/AUTEUR <?php } ?>
Mais votre sidebar comporte déjà des tags conditionnels :
<?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.
<!-- 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 :
- Displaying Related Category and Author Content in WordPress (Darrenhoyt)
- La boucle (Codex)
- la magique boucle query_post (Codex)
- WordPress, controler l’affichage de votre liste de billets via query_posts() (Webinventif)
- Afficher les articles de vos catégories ou mots clés (Geekeries)
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.
Mmh, j’ai mis en route mon cerveau et j’ai compris que vous parliez du code juste au dessus ! :s
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
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
Chez moi ça marche nickel! Bien joué 🙂
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
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.