早先便对本站评论者头像作了缓存,一直用的好好的,但前段时间发现有个别头像缓存不了,也一直没有修复过,最近对自用的主题进行了大的整改,整体扁平化,所以也对此功能进行了修复。首先想到的是,部分用户可能没有头像,所以导致缓存失败,于是便想应该判断该评论者是否有头像,没有的话用默认头像代替。
判断Email是否有Gavatar头像:
// ludou $email = '[email protected]'; // 要验证的Email地址 $hash = md5(strtolower(trim($email))); $uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404'; $headers = @get_headers($uri); if (!preg_match("|200|", $headers[0])) { echo '没有头像'; } else { echo '有头像'; }
下面的缓存到本地代码,便加入了该判断,也就解决了我的问题:
//code by ludou
function my_avatar( $email, $size = '48', $default = '', $alt = '') {
$f = md5( strtolower( $email ) );
// 以下代码将头像缓存到wp-content目录下
$a = WP_CONTENT_URL . '/avatar/'. $f . $size . '.png';
$e = WP_CONTENT_DIR . '/avatar/' . $f . $size . '.png';
$d = WP_CONTENT_DIR . '/avatar/' . $f . '-d.png';
if($default=='')
$default = 'http://a.zpc.me/default.jpg';
$t = 2592000; // 缓存有效期30天, 这里单位:秒
if ( !is_file($e) || (time() - filemtime($e)) > $t ) {
if ( !is_file($d) || (time() - filemtime($d)) > $t ) {
// 验证是否有头像
$uri = 'http://www.gravatar.com/avatar/' . $f . '?d=404';
$headers = @get_headers($uri);
if (!preg_match("|200|", $headers[0])) {
// 没有头像,则新建一个空白文件作为标记
$handle = fopen($d, 'w');
fclose($handle);
$a = $default;
}
else {
// 有头像且不存在则更新
$r = get_option('avatar_rating');
$g = 'http://www.gravatar.com/avatar/'. $f. '?s='. $size. '&r=' . $r;
copy($g, $e);
}
}
else {
$a = $default;
}
}
$avatar = "<img alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
return apply_filters('my_avatar', $avatar, $email, $size, $default, $alt);
}
在wp-content目录下创建avatar目录,权限755,把上面的代码放入function.php中 ?>前。
调用头像的地方 由 get_avatar 改为 my_avatar。
代码来自露兜博客,感谢分享。
算是解决了问题,收工。
跟原来的代码是哪里不同呢?