重新折腾了下,与上一个比较,变化还是用了filter,这样就不用再到侧边栏最近评论/读者墙以及后台部分修改相应的代码,ajax评论也能正常显示,而且比较方便。另外去掉了QQ的缓存,因为发现获取QQ头像(尤其是自定义头像)与网速和服务器有很大关系,错误的话经常返回默认头像,不想每次都刷新缓存。
方法:
1、在对应地方(这里是wp-content/cache/img)建立权限755的文件夹,放上默认头像
2、在主题function.php里面添加以下代码(<?php 和 ?> 之间的部分)
<?php add_filter('get_avatar', 'cache', 10, 3); function cache($avatar, $comment, $size){ $t = 604800; //設定7天, 單位:秒 $d = get_bloginfo('wpurl').'/wp-content/cache/img/default.jpg';//默认图片 $face_size = false;//单独指定头像的大小, false or integer $qq_face_url = 'http://qun.qq.com/cgi/svr/face/getface?type=1&uin=%s'; //QQ头像地址, %s表示QQ号 if ( isset($comment->comment_author_url) && preg_match ('/^(http:\/\/)?[1-9][0-9]*$/i', $comment->comment_author_url) ) { $qq = preg_replace('|\D*|', '', $comment->comment_author_url); $avatar = preg_replace('/src=\'[^\']*\'/', 'src=\'' . str_replace('%s', $qq, $qq_face_url) . '\'', $avatar); if( $face_size ) $avatar = str_replace('\'' . $size . '\'', '\'' . $face_size . '\'', $avatar); return $avatar; } else{ $f = md5(strtolower($comment->comment_author_email)); $r = get_option('avatar_rating'); $g = 'http://www.gravatar.com/avatar/'.$f.'?s=50&d='.$d.'&r='.$r; $a = get_bloginfo('wpurl').'/wp-content/cache/img/'.$f.'.jpg'; $e = ABSPATH .'/wp-content/cache/img/'.$f.'.jpg'; if ( !is_file($e) || (time() - filemtime($e)) > $t ){ copy($g, $e); @chmod($e,0777); if (filesize($e)< 500) { copy($d, $e); } } if( $face_size ) $size = $face_size; $avatar = ""; return $avatar; } return $avatar; }
放弃缓存QQ头像的原因,上面也说了,因为确实可以出现自定义头像,但是要多刷新几次,晚上成功
率比较高。仍需要的话,对照上一个版本修改一下吧。
最后还是要感谢willin和Ono Oogami提供的方法。
继续请教~用了这个方法是不是所有get_avatar都是可以的?
为啥我评论框那里欢迎回来的头像是上一个评论的人而不是自己的呢= =
@snowxh 用了钩子应该是所有的都加上缓存了,后台也是。评论框这个问题我一直考虑,不光你有,很多博客头像都有点问题。好像是cookie不对,因为用了< ?php echo get_avatar($user_email, 50);?>,这个($user_email有点问题,试试其它的
我来秀秀偶的头像,最爱的银……