By default, most WordPress themes display Recent Comments in some form or another. Unfortunately, it isn’t usually very user-friendly, so it will often get removed.
Until now, most of your other options required the use of a WordPress plugin, but today I ran across a great code snippet you can use to display recent comments in a useful format. I just tested it out on my test site and it looks good. Here is the code you will want to paste into your theme’s sidebar:
<h2>Recent Comments</h2>
<?php
global $wpdb;
$sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID,
comment_post_ID, comment_author, comment_date_gmt, comment_approved,
comment_type,comment_author_url,
SUBSTRING(comment_content,1,30) AS com_excerpt
FROM $wpdb->comments
LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID =
$wpdb->posts.ID)
WHERE comment_approved = '1' AND comment_type = '' AND
post_password = ''
ORDER BY comment_date_gmt DESC
LIMIT 10";
$comments = $wpdb->get_results($sql);
$output = $pre_HTML;
$output .= "\n<ul>";
foreach ($comments as $comment) {
$output .= "\n<li>".strip_tags($comment->comment_author)
.":" . "<a href=\"" . get_permalink($comment->ID) .
"#comment-" . $comment->comment_ID . "\" title=\"on " .
$comment->post_title . "\">" . strip_tags($comment->com_excerpt)
."</a></li>";
}
$output .= "\n</ul>";
$output .= $post_HTML;
echo $output;?>


















Wow, that is extremely helpful. I’ve been using plugins for the recent comments and I think it’s also included in the default sidebar widgets.
Thanks for the code!
So here’s my question: Is there a way to highlight new comments on site? I’m running a site that gets a lot of comments an readers have asked for a way to know which ones are new and which ones aren’t. I’m not up on my coding of cookies and such to do that.
Instead of calling the WP db base directly:
- backup all files
- select a recent post plugin (a simple one)
- cut and paste the pi code in to your theme functions file
- check if all is in same order like original file
- save it
- insert the php call in your desired template file
Thanks for the great code needed it for my new design. I am pulling the avatar of the commenter on my home page.
Has this method for displaying recent comments changed much since this post was originally written?
Thanks have been googling for days looking for this!
Great. I almost quit googling for this one. Thank you so much,
Thanks for this. I see however, that the commenter name is not linking to his specified website…?
Perfect – just what I’m looking for. Trying to avoid adding too many plugins as it makes upgrading wordpress harder. Better if I can just code it in directly.
Does anyone know how i can add … to the end of the 30 characters (or how many you want to display) rather than just cutting of a word? Doesn’t look that good I would say.
You can add the dots before the tag that should work.
comments
LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID =
$wpdb->posts.ID)
WHERE comment_approved = ‘1′ AND comment_type = ” AND
post_password = ”
ORDER BY comment_date_gmt DESC
LIMIT 10″;
$comments = $wpdb->get_results($sql);
$output = $pre_HTML;
$output .= “\n”;
foreach ($comments as $comment) {
$output .= “\n”.strip_tags($comment->comment_author)
.”:” . “ID) .
“#comment-” . $comment->comment_ID . “\” title=\”on ” .
$comment->post_title . “\”>” . strip_tags($comment->com_excerpt)
.”….“;
}
$output .= “\n”;
$output .= $post_HTML;
echo $output;?>
PS. Thanks very much for this great code it helped me design a theme that was less plugin dependent
thank you for the trick. is it possible to control the excerpt so that it will display more text.
Yes there is a way, you can change the number 30 to any number you would like. I think that represents the characters to display. I am not sure about the 1 so if I were you, I would leave that alone. Hope this helps.
SUBSTRING(comment_content,1,30) AS com_excerpt
Hi Samuel,
You seem to know your stuff. This code has really helped me and I’ve nearly got it perfect but I really am trying to find out how to end the ‘excerpt’ on the last *word* rather than just characters – as in one example the last character is an apostrophe which echoes out as the ascii equivalent – eg. &#…etc. Any ideas? I would also need to know exactly where to put the code if anybody does reply…
Thanks!
Thanks allot for the code using it at my website.
I wonder if you could do the same for ping and trackbacks. For some reason the default recent comments gives me Ping/Trackbacks and comments inside the same Recent comments (reason i use the code posted here) it would be nice to have a seperate box for the ping/track backs as well.
It worked well on my site. Thanks so much
This worked like a charm!! Thanks!!
Hello! Thank you for posting this! I’ve been trying to display 1 recent comment for a specific post on my homepage (within a multiple loop) Is there a way to modify the snippet to do so?
Thanks for the great code needed it for my new design. I am pulling the avatar of the commenter on my home page.