整合侧边最新评论和评论框中的 Gravatar 缓存 (代码版)
昨天写了一篇关于 Gravatar 缓存的文章,这里只是缓存日常文章评论框中的 Gravatar 的头像。如果你主页中有多处调用了 Gravatar 头像的话(读者墙、侧边栏带头像最新评论)那么你可以试一下如下方法。这个方法也是 Willan 大师新出的 Gravatar 缓存方法。(如果你用了我昨天提供的方法,麻烦你将代码改回来。。。。)
前提:先在你的网站 wp-content 的同級目录建立文件夹: /avatar 权限: 755,這是准备 Gravatar 缓存的路径
准备一张适合你模板尺寸的默认头像,名为“default.jpg”放在此文件夹里面。
1. 把下面的代码扔进主题的 functions.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php /* Mini Gavatar Cache by Willin Kan. */ function my_avatar( $email, $size = '42', $default = '', $alt = false ) { $alt = (false === $alt) ? '' : esc_attr( $alt ); $f = md5( strtolower( $email ) ); $w = get_bloginfo('wpurl'); $a = $w. '/avatar/'. $f. '.jpg'; $e = ABSPATH. 'avatar/'. $f. '.jpg'; $t = 1209600; //設定14天, 單位:秒 if ( empty($default) ) $default = $w. '/avatar/default.jpg'; if ( !is_file($e) || (time() - filemtime($e)) > $t ){ //當頭像不存在或文件超過14天才更新 $r = get_option('avatar_rating'); $g = sprintf( "http://%d.gravatar.com", ( hexdec( $f{0} ) % 2 ) ). '/avatar/'. $f. '?s='. $size. '&d='. $default. '&r='. $r; copy($g, $e); } if (filesize($e) < 500) copy($default, $e); $avatar = "<img title='{$alt}' alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"; return apply_filters('my_avatar', $avatar, $email, $size, $default, $alt); } // -- END ---------------------------------------- ?> |
上面第一行的 $size 可先定義好.
然後將所有 get_avatar() 改 my_avatar(), 大概是 functions.php, comments.php, sidebar.php, comments-ajax.php 會有頭像的地方有這 get_avatar() 函數.
注意這 my_avatar() 的方法和 get_avatar() 有一點差別.(一定要注意这里,要把原来WP调用的格式改一下,否则会出现错误)
get_avatar() 可用 id 或 email, 可寫成 get_avatar($comment, $size= ...
而 my_avatar() 只能用 email, 要改成 my_avatar($comment->comment_author_email, $size= ...
使用參數如下:
1 | <?php echo my_avatar( $email, $size, $default, $alt ); ?> |
好了,这样你的评论框 Gravatar 头像缓存就改造完成了,接下来是侧边栏最新评论中的头像缓存了。
将下列代码扔到你的 Sidebar.php 中的适当位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <h3>Recent Comments</h3> <ul class="recentcomments"> <?php //2010/4/25 更新 by willin $limit_num = '8'; //这里定义显示的评论数量 $my_email = "'" . get_bloginfo ('admin_email') . "'"; //这里是自动检测博主的邮件,实现博主的评论不显示 $rc_comms = $wpdb->get_results(" SELECT ID, post_title, comment_ID, comment_author, comment_author_email, comment_content 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 = '' AND comment_author_email != $my_email ORDER BY comment_date_gmt DESC LIMIT $limit_num "); $rc_comments = ''; foreach ($rc_comms as $rc_comm) { //get_avatar($rc_comm,$size='50') $rc_comments .= "<li>" . my_avatar($rc_comm->comment_author_email,$size='40') . "<span class='zsnos_comment_author'>".$rc_comm->comment_author.": </span><a href='" . get_permalink($rc_comm->ID) . "#comment-" . $rc_comm->comment_ID //. htmlspecialchars(get_comment_link( $rc_comm->comment_ID, array('type' => 'comment'))) // 可取代上一行, 会显示评论分页ID, 但较耗资源 . "' title='on " . $rc_comm->post_title . "'>" . strip_tags($rc_comm->comment_content) . "</a></li>\n"; } $rc_comments = convert_smilies($rc_comments); echo $rc_comments; ?> </ul> |
然后,加上如下 CSS
1 2 3 | #sidebar .recentcomments img.avatar{width:16px;height:16px;float:left;position:relative;border:1px solid #ddd;margin:0 5px 0 0;padding:1px;} #sidebar ul.recentcomments{list-style:none;padding-left:0;} #sidebar ul.recentcomments li{margin:5px 0 0;line-height:20px;height:20px;overflow:hidden;} |
搞定,收工。。
就是右侧的评论头像对吧?看到你首页的变化了
已经用这个了
类似的代码经常看到
我深奥得很,看见代码就头疼。
我博客上加上去一天就去掉了,全部调用还是影响速度,不过我没搞缓存,你的要好很多。
这个就方便鸟
这样的效果不错。。。。
我的网站 整体感觉 还是能不要图就不要图的 呵呵
有空也来折腾一下。。
坐个沙发,博客排名不错