Michael Heilemann.
If you have Dunstan's Time Since installed, this plugin uses it for the title="" attributes on the comments and posts. Extra caching and 2.x table variables added by Donncha O Caoimh, http://ocaoimh.ie/ Author: Brian Meidell Author URI: http://meidell.dk/blog Version 1.5: Now works without LOCK TABLE and CREATE TEMPORARY TABLE priviledges. Version 1.5.1: Can't remember what I did here Version 1.5.2: Fixed count select statement to not include spammy comments Version 1.5.3: Properly excludes track- and pingbacks Version 1.5.4: Excludes posts that are not published, even if they have comments Version 1.5.5: Fade old comments, fixed bug that wreaked havoc with Time Since Version 1.5.6: Bugfix from Jonas Rabbe (http://www.jonas.rabbe.com/) pertaining to timesince Version 1.5.7: Bugfix so old colors can be darker than new colors (stupid oversight), thanks to http://spiri.dk for spotting it. Bugfix where single digit hex would cause invalid colors, thanks to http://www.wereldkeuken.be/ for the fix. Version 1.5.8: Bugfix from Matthias Schutz regarding time_since. Version 1.5.9: Added function redefiniotion protection if people use the plugin in several places Version 1.5.10: Added bugfix by http://cavemonkey50.com Added time_since bugfix from http://getk2.com/forum/showthread.php?t=449 */ function blc_latest_comments($num_posts = 5, $num_comments = 6, $hide_pingbacks_and_trackbacks = true, $prefix = "
  • ", $postfix = "
  • ", $fade_old = true, $range_in_days = 10, $new_col = "#444444", $old_col = "#cccccc") { $file_key = md5( $num_posts . $num_comments . $hide_pingbacks_and_trackbacks . $prefix . $postfix . $fade_old . $range_in_days . $new_col . $old_col ); $filename = ABSPATH . "wp-content/cache/latest_comments_{$file_key}.php"; $output = ''; if( is_file( $filename ) ) include( $filename ); if( $output != '' ) { if( time() - filemtime( $filename ) > 3600 ) unlink( $filename ); echo $output; return; } global $wpdb, $tablecomments, $tableposts; if(!function_exists('blc_clamp')) { function blc_clamp($min, $max, $val) { return max($min,min($max,$val)); } } function get_channel($col, $offset) { return hexdec(substr($col, $offset, 2)); } function channels($col) { $r = get_channel($col, 1); $g = get_channel($col, 3); $b = get_channel($col, 5); return array($r, $g, $b); } $max_time = $range_in_days * 24 * 60 * 60 ; function scale_channel($old, $new, $diff, $max_time) { $range = $old - $new; $c = round($diff/$max_time*($range))+$new; $c = blc_clamp(min($new, $old), max($new, $old), $c); $c_hex = str_pad(dechex($c), 2, '0', STR_PAD_LEFT); return $c_hex; } $usetimesince = function_exists('time_since'); // Work nicely with Dunstan's Time Since plugin (adapted by Michael Heilemann) // This is compensating for the lack of subqueries in mysql 3.x // The approach used in previous versions needed the user to // have database lock and create tmp table priviledges. // This uses more queries and manual DISTINCT code, but it works with just select privs. if(!$hide_pingbacks_and_trackbacks) $ping = ""; else $ping = "AND comment_type<>'pingback' AND comment_type<>'trackback'"; $posts = $wpdb->get_results("SELECT comment_post_ID, post_title FROM ($wpdb->comments LEFT JOIN $wpdb->posts ON (comment_post_ID = ID)) WHERE comment_approved = '1' AND ($wpdb->posts.post_status='publish' OR $wpdb->posts.post_status='static') $ping ORDER BY comment_date DESC;"); $seen = array(); $num = 0; if($fade_old) { list($r_new, $g_new, $b_new) = channels($new_col); list($r_old, $g_old, $b_old) = channels($old_col); } foreach($posts as $post) { // The following 5 lines is a manual DISTINCT and LIMIT, // since mysql 3.x doesn't allow you to control which way a DISTINCT // select merges multiple entries. if(array_key_exists($post->comment_post_ID, $seen)) continue; $seen[$post->comment_post_ID] = true; if($num++ > $num_posts) break; $commenters = $wpdb->get_results("SELECT *, UNIX_TIMESTAMP(comment_date) AS unixdate FROM $wpdb->comments WHERE comment_approved = '1' AND comment_post_ID = '".$post->comment_post_ID."' $ping ORDER BY comment_date DESC LIMIT $num_comments;"); $count = $wpdb->get_var("SELECT COUNT(comment_ID) AS c FROM $wpdb->comments WHERE comment_post_ID = $post->comment_post_ID AND comment_approved = '1' ".$ping); $i = 0; $link = get_permalink($post->comment_post_ID); if($usetimesince) //$title = " title=\"Last comment was ".time_since($commenters[0]->unixdate)." ago\""; $title = " title=\"Last comment was ".time_since(strtotime($commenters[0]->comment_date_gmt." GMT"),time())." ago\""; else $title = ""; $output .= $prefix."".stripslashes($post->post_title). "  ".$count."
    \n"; foreach($commenters as $commenter) { if($usetimesince) // $title = " title=\"Posted ".time_since($commenter->unixdate)." ago\""; $title = " title=\"Posted ".time_since(strtotime($commenter->comment_date_gmt." GMT"), time())." ago\""; if($fade_old) { $diff = time() - $commenter->unixdate; $r_hex = scale_channel($r_old, $r_new, $diff, $max_time); $g_hex = scale_channel($g_old, $g_new, $diff, $max_time); $b_hex = scale_channel($b_old, $b_new, $diff, $max_time); $colstr = " style=\"color: #".$r_hex.$g_hex.$b_hex.";\""; } if($i++ > 0) $output .= ", "; if( $commenter->comment_author_url != '' ) { $output .= "comment_author_url . "\"$title>".stripslashes($commenter->comment_author).""; } else { $output .= "comment_ID."\"$title>".stripslashes($commenter->comment_author).""; } } if($count > $num_comments) $output .= " [...]"; $output .= "".$postfix."\n"; } $tmpfname = tempnam("wp-content/cache/", "BLC"); $handle = fopen($tmpfname, "w"); fwrite($handle, '<' . '?php $output = stripslashes( "'.addslashes( $output ).'" ); ?' . '>' ); fclose($handle); rename( $tmpfname, $filename ); echo $output; } ?>