300x250 Code: Adding Recent Comments To Your WordPress Theme

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;?>

[via WordPress Garage]

Want automatic updates? Subscribe to our RSS feed or
Get Email Updates sent directly to your inbox!
  • Print This
  • Kyle Eslick is WordPress enthusiast who took his passion for WordPress to the next level in 2007 by launching WPHacks.com as a place to share hacks, tutorials, etc. Connect with Kyle on Twitter or Google+!

    There Are 49 Responses So Far »

    • Dino

      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!

    • http://secondavenuesagas.com Ben K.

      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.

    • milo

      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

    • Pingback: Daily Design Links for 9-25-08 » Anidan Design

    • http://www.shanestrong.com Shane Strong

      Thanks for the great code needed it for my new design. I am pulling the avatar of the commenter on my home page.

      • John

        How do you pull the avatar instead of the name?

    • http://www.joshstauffer.com/ Josh Stauffer

      Has this method for displaying recent comments changed much since this post was originally written?

    • http://girlsaloudblog.com/ Hayley

      Thanks have been googling for days looking for this!

    • TAGABUKID

      Great. I almost quit googling for this one. Thank you so much,

    • Pingback: Tanpa Pena » Blog Archive » Membuat “Komentar Terbaru” Di Template Wordpress

    • http://www.themedigital.com/ Cosmin

      Thanks for this. I see however, that the commenter name is not linking to his specified website…?

    • http://www.scotiasystems.com Scotia Systems

      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.

    • Mats

      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.

      • Samuel Musarika

        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 :)

    • chris

      thank you for the trick. is it possible to control the excerpt so that it will display more text.

      • Samuel Musarika

        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

        • Tim

          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! :)

    • http://www.cell-systems.net KillerSneak

      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.

    • http://tek3d.org/ Tek3D

      It worked well on my site. Thanks so much :)

    • Damion

      This worked like a charm!! Thanks!!

    • v

      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?

    • spor merkezleri

      Thanks for the great code needed it for my new design. I am pulling the avatar of the commenter on my home page.

    • Pingback: Add Customized Recent Comments to WordPress « Jakebelfry's Internet Marketing Blog

    • http://www.reviewrecruiter.com.au razor.harrison

      Hi,

      I have a site and have used this code which is very helpful. However, I am wondering if you could please tell me how I could filter results based on category as well? So I only want to display recent posts within a certain category?

    • abz

      Thanks for the code works like a charm, even managed to style it in css. I just need to know how to get the php to display the date aswell as the page title the comments being retrieved from. At the moment only the author and comment is displayed.

      Thanks again

      Keep up the good work

      • Suman

        Give this a try! :)

        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” . “ID) .
        “#comment-” . $comment->comment_ID . “\” title=\”on” .
        $comment->post_title . “\”>” . strip_tags($comment->com_excerpt) .
        “…
        ” . strip_tags($comment->comment_author) .
        “, said on ” . strip_tags($comment->comment_date_gmt) .”";
        }
        $output .= “\n”;
        $output .= $post_HTML;
        echo $output;?>

      • Suman

        ..my bad, sorry for the earlier one! give this a try, hope this works!

        <?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,60) 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>" . "<a href=\"" . get_permalink($comment->ID) .
        "#comment-" . $comment->comment_ID . "\" title=\"on" .
        $comment->post_title . "\">" . strip_tags($comment->com_excerpt) .
        "…</a><br />" . strip_tags($comment->comment_author) .
        ", said on " . strip_tags($comment->comment_date_gmt) ."</li>";
        }
        $output .= "\n</ul>";
        $output .= $post_HTML;
        echo $output;?>

        • John

          Thanks, Suman. However, that code shows the date in an unattractive format (i.e. 2010-04-23 15:48:34).

          Is there a way to simply display it as 4/23/2010?

    • dudd

      thank’s for this code, please, how can i filter comments on specific category ?

      thank’s

    • http://www.andol.info andol

      thanks, this really helps me out of wordpress 3.0 bugs.

    • http://popsicles.ph James

      hello, instead of putting the to the excerpt of the comment I wanted it to be place into the authors name. How could I possible do that?

      and how can I add the avatar of the commenter? great code!

      • Samuel Musarika

        Hey did you figure out how to do the avatar. I have an updated code and it is more flexible and it does have avatars.

        • John

          Can you please share your code? I’d like to replace the names with avatars.

    • http://popsicles.ph popsicles

      oh, i got it already. my only problem now is to add gravatar on it.

    • Suman

      Hi, thanks for the great code and that works fine! I think I’m trying to be a bit silly but I desperately need it, I wonder how have you displayed the date on the format as on your recent comments when I tried to get it through comment_date_gmt, I can not pass any strings to formate the date and time!

    • Santiago

      How can i only display 5 comments?

      • http://kyleeslick.com Kyle Eslick

        Change LIMIT 10 to LIMIT 5 :)

    • peter

      Thanks, good recent comments script! :)

    • Luis

      Hi, I used it on my blog, using WordPress 3, works fine, but does not bring the Title of the POst where the comment was made on … do you know how can i fix this..??
      Thanks a lot !!
      Luis

    • John

      Anyway to show the avatars instead of the names?

      I’m guessing something has to be changed here: $comment->comment_author

    • http://www.tatilyerlerim.biz/ Tatil Yerleri

      Thanks have been googling for days looking for this…

    • http://buckinspire.com Buck

      Hi there,

      I’m a newbie. Just curious, where do you paste this code? I see an editor, but not exactly sure where to place it and don’t want to break anything.

      Also, is there a way to filter out the admin (me)? I reply to comments and want to just focus on visitor’s comments.

      Thanks!

    • http://sevensomewhere.com Clare

      Works a treat – and simple too. The previous “recipe” I found was trying to edit the functions file and it was all very complicated!

    • http://www.css3files.com Christian Krammer

      Thanks for your great work. I searched very long for a simple way to display the comments AND link them to the right posts. I am very glad that I found your solution. Thank you very much!

    • http://viaestvita.net/ anton

      Thank you! Very useful
      just does not work with the plugin qtranslate

    • http://viaestvita.net/ anton

      for good work with the plugin qtranslate
      must be replaced

      $comment->post_title

      on

      __($comment->post_title)

    • Pingback: Reading up on “comments” again « Feet up, eyes closed, head back

    • nicole

      thanks a lot!!!! :D

    • Dennis

      is there any way to change the time zone to (‘F j, Y H:i a’) (GMT+05:30) New Delhi India.

    • Subash Ghimire

      well, this is very helpful and i need a help from you guys to add a flash drop down menu on my site. please help me :(

    • http://www.simplesites4u.com Danny Jones

      Very useful indeed! Perfect job! thanks for taking the time to post this

    • http://ijustutter.com Mrina

      This is good. However; I was looking at this page and couldn’t stop myself falling in love with “Recent Comment Box” you have on sidebar. It have everything I need for my blog. This came with theme or is modified? Can I get some help to get it for my blog?

      Thanks.

    • michael kane

      This code is still work on the newest version of WP??