Une façon d'augmenter l'engagement des visiteurs est de récompenser leurs commentaires en les affichant sur votre site Web. De plus, vous pouvez également mettre en avant les meilleurs commentateurs, en créant des liens vers leur site Web. Ici, nous allons créer un modèle de page dédié pour afficher ces commentaires et commentateurs en un seul endroit.
En bref, ce tutoriel vous apprendra à :
- créer un modèle de page,
- utiliser des requêtes SQL dans votre code pour récupérer des commentaires avec différents paramètres,
- créer une section de la page qui n'est visible que par l'administrateur,
- ajouter la prise en charge d'un plugin lié aux commentaires.
Création d'un modèle de page
La façon la plus simple de créer un modèle de page est d'ouvrir le fichier page.php de votre thème, qui ressemblera à peu près à ceci :
<?php get_header(); ?>
<div id="content">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h2 class="page_title"><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
<?php comments_template(); ?>
<?php endwhile; endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Copiez et collez le contenu de page.php et ajoutez ceci tout en haut :
<?php /* Template Name: Comments Central */ ?>
Et enregistrez-le. Il n'y a pas de règles strictes pour nommer un fichier de modèle de page, mais c'est une bonne idée d'utiliser un préfixe pour le rendre reconnaissable, disons « pt-comment-central.php ». Nous n'avons rien ajouté à ce modèle de page, mais il est opérationnel et sélectionnable dans la zone de tableau de bord « écrire une nouvelle page ».
Récupération des commentaires
Pour ce modèle de page, nous présenterons quatre aspects différents des commentaires :
- Commentaires récents,
- Derniers trackbacks / pingbacks,
- Meilleurs commentateurs,
- Articles les plus commentés,
Premièrement, nous allons faire les Commentaires récents :
<h3>Recent Comments</h3>
<ul id="cc-recent-comments">
<?php
$max = 7; // number item to get
global $wpdb;
$sql = "SELECT c.*, p.post_title FROM $wpdb->comments c INNER JOIN $wpdb->posts p ON (c.comment_post_id=p.ID) WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') ORDER BY comment_date DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '%g <a href="%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%ct','%cd','%g','%pt','%pu','%au','%an','%cid');
$replacements = array($row->comment_title,$row->comment_date,get_avatar($row->comment_author_email,'32'),$row->post_title,get_permalink($row->comment_post_ID),$row->comment_author_url,$row->comment_author,$row->comment_ID);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed = 1;
}
if ($echoed==0)
echo '<li>No comment found.</li>';
?>
</ul>
La requête SQL demande tous les commentaires approuvés triés par date (les plus récents d'abord). $max est l'endroit où nous définissons le nombre de commentaires à obtenir, 7 dans notre cas. La sortie du code ci-dessus sera une liste non ordonnée de commentaires récents :

Avec un peu de CSS, nous pouvons redresser cela pour que ce soit plus joli :
#cc-recent-comments li {
width: 100%;
float: left;
list-style-type: none;
}
#cc-recent-comments li img {
float: left;
margin-top: -5px;
}

$template détermine comment le texte réel sera écrit ; ceci est basé sur le format créé par WP Comment Remix, et vous pouvez suivre ce lien pour en savoir plus sur sa personnalisation (recherchez les « tokens »).
Ensuite, il y a Pingbacks / Trackbacks récents :
<h3>Recent Pingbacks / Trackbacks </h3>
<ul id="cc-recent-trackbacks">
<?php
$sql = "SELECT c.*, p.post_title FROM $wpdb->comments c INNER JOIN $wpdb->posts p ON (c.comment_post_id=p.ID) WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') ORDER BY comment_date DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '%g <a href="%au">%an</a> on <a href="%pu#comment-%cid">%pt</a>';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%ct','%cd','%g','%pt','%pu','%au','%an','%cid');
$replacements = array($row->comment_title,$row->comment_date,get_avatar($row->comment_author_email,'32'),$row->post_title,get_permalink($row->comment_post_ID),$row->comment_author_url,$row->comment_author,$row->comment_ID);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed=1;
}
if ($echoed==0)
echo '<li>No comment found.</li>';
?>
</ul>
Le code ci-dessus est très similaire à celui que nous avons pour les Commentaires récents, les seules différences étant que nous demandons maintenant des commentaires avec « comment_type » sous « pingback » / « trackback », et le modèle est également un peu différent. Résultat :

Voici le code pour les Meilleurs commentateurs :
<h3>Top Commenters</h3>
<ul id="cc-top-commenters">
<?php
$sql = "SELECT comment_author, comment_author_url, comment_author_email, count(comment_ID) as comment_count FROM $wpdb->comments WHERE comment_approved = '1' AND comment_type not in ('trackback','pingback') GROUP BY comment_author, comment_author_url, comment_author_email ORDER BY comment_count DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '<a href="%au">%g %an</a> (%c comments)';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%g','%au','%an','%c');
$replacements = array(get_avatar($row->comment_author_email,'32'),$row->comment_author_url,$row->comment_author,$row->comment_count);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed = 1;
}
if ($echoed==0)
echo '<li>No commenter found.</li>';
?>
</ul>
Rien de trop révolutionnaire là. Remarquez cependant la fonction get_avatar(), qui vous donnera le Gravatar de toute personne dont vous spécifiez l'adresse e-mail. Dans ce cas, nous récupérons l'image d'avatar en utilisant l'adresse e-mail du commentateur. Avec un CSS similaire à celui que nous avons pour les commentaires récents, nous pouvons obtenir ce résultat :
#cc-top-commenters li {
width: 100%;
float: left;
list-style-type: none;
}
#cc-top-commenters li img {
float: left;
margin-top: -5px;
}

Enfin, le module Articles les plus commentés :
<h3>Most Commented Posts</h3>
<ul id="cc-most-comments">
$sql = "SELECT p.*, c.comment_count FROM $wpdb->posts p INNER JOIN (SELECT comment_post_id, count(comment_ID) as comment_count from $wpdb->comments WHERE comment_approved='1' GROUP BY comment_post_id) c ON (c.comment_post_id=p.ID) ORDER BY c.comment_count DESC LIMIT $max";
$results = $wpdb->get_results($sql);
$template = '<a href="%pu">%pt</a> (%c comments)';
$echoed = 0;
foreach ($results as $row) {
$tags = array('%pd','%pt','%pu','%c');
$replacements = array($row->post_date,$row->post_title,get_permalink($row->ID),$row->comment_count);
echo '<li>' . str_replace($tags,$replacements,$template) . '</li>';
$echoed = 1;
}
if ($echoed==0)
echo '<li>No commenter found.</li>';
?>
</ul>

Et voilà. Ensuite, nous allons ajouter un peu de fantaisie en ajoutant des éléments que seul l'administrateur pourra voir.
Informations réservées à l'administrateur
Pour afficher des éléments uniquement pour les administrateurs, nous pouvons utiliser cet extrait de code de WPCandy :
<?php
global $user_ID;
if( $user_ID ) :
if( current_user_can('level_10') ) :
// admin-only stuff here.
endif;
endif; ?>
Sur le tableau de bord, nous avons un aperçu rapide du nombre total de commentaires d'un site, approuvés, en attente de révision et de spam. Répliquons cela pour notre modèle de page pour un accès plus facile et réservé à l'administrateur :
<?php
$num_comm = wp_count_comments();
?>
Total Comments: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?"><?php echo $num_comm->total_comments; ?></a>
Approved: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=approved"><?php echo $num_comm->approved; ?></a>
Moderated: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=moderated"><?php echo $num_comm->moderated; ?></a>
Spam: <a href="<?php bloginfo('wpurl'); ?>/wp-admin/edit-comments.php?comment_status=spam"><?php echo $num_comm->spam; ?> </a>

wp_count_comments() est une fonction intéressante qui renvoie un tableau de divers chiffres statistiques sur les commentaires. Nous ajoutons également des liens vers la zone d'administration des commentaires correspondante.
Ajouter un peu de piquant
Enfin, disons que vous trouvez un plugin de commentaires intéressant que vous souhaitez intégrer à ce modèle de page. Au lieu d'ajouter plus de code, ajoutons simplement la prise en charge. Pour cet exemple, j'utiliserai le plugin Activity Sparks, qui peut « afficher un graphique de style « sparkline » dans votre barre latérale indiquant l'activité des articles et/ou des commentaires ». Cela me semble génial.
Généralement, le fichier readme.txt d'un plugin vous explique comment l'ajouter à vos fichiers de thème. Dans notre cas, le code peut être le suivant :
<?php
if(function_exists('activitysparks')) {
activitysparks(array('dataset'=>'legend','height_px'=>100,'width_px'=>600,'period'=>30, 'ticks'=>24));
}
?>

function_exists() vérifie si une fonction particulière est disponible ; dans notre cas, la fonction activitysparks, qui sera disponible si le plugin a été téléchargé et activé. Si elle est là, nous affichons le graphique. Sinon, notre modèle de page n'affichera rien (mais il fonctionnera toujours très bien, sans erreurs).
Résultat et exemple
Un exemple de ce modèle de page est disponible ici. Il utilise les codes que vous voyez ici avec quelques modifications, principalement pour maintenir la structure HTML cohérente avec le reste du site Web. Le code complet de ce modèle de page est disponible sur Pastebin.
Crédits et lectures complémentaires
- Les codes utilisés pour afficher les différents commentaires récents et les plus populaires sont tirés du plugin WP Comment Remix. Jetez un œil à son code pour en savoir plus sur les commentaires, comme exclure les commentaires d'administrateur des meilleurs commentateurs ou comment prendre en compte uniquement les commentaires récents. Le
$templateque nous utilisons pour formater la sortie peut également être appris davantage sur cette page. - Créer votre propre modèle de page sur le Codex WordPress.
- Tutoriel sur l'affichage de contenu réservé aux administrateurs sur WPCandy.
bien
Super tutoriel Hafiz !
Et si je ne me trompe pas, c'est le premier article invité ? Si oui, woot !
Peut-être que je serai le prochain 😛
Il y a certainement des choses ici que je veux implémenter sur mon photoblog une fois qu'il sera converti en WordPress. Merci !
Salut Kim, génial. Fais-nous savoir comment ça se passe une fois que tu l'auras implémenté.
Excellente idée, je pourrais implémenter quelque chose comme ça pour mon site.
Juste pour information : au lieu de faire des requêtes brutes, essayez d'utiliser ceci :
include ( ABSPATH . ‘wp-admin/includes/template.php’ );
_wp_get_comment_list( ‘approved’, false, 0, 20, 0, ‘comment’ );
Salut Ptah, content que tu aies trouvé ça utile. Je pensais en fait implémenter une page similaire ici aussi car je pense que c'est un bon moyen de « récompenser » les bons commentateurs.
Et merci pour le conseil sur les requêtes SQL brutes. Je suppose que cela pourrait essentiellement remplacer toutes les instances de code comme celle-ci ?
$sql = "SELECT p.*, ..."; // et ainsi de suite$results = $wpdb->get_results($sql);
Exactement,
_wp_get_comment_list()renvoie un tableau de tous les commentaires, donc à partir de là, il suffirait de faire une boucle foreach.On apprend quelque chose de nouveau chaque jour. Je vais examiner attentivement cette fonction, merci Ptah 🙂