WordPress头像本地缓存优化
上一篇文章我们讲了,WordPress中如何判断Email是否有Gravatar头像。对于这个功能,…
上一篇文章我们讲了,WordPress中如何判断Email是否有Gravatar头像。对于这个功能,我们可以应用到WordPress国内用户普遍使用的Gravatar头像缓存功能上,避免出现:都是默认头像,但是缓存到本地就出现N多个不同名的文件。
优化后的缓存代码
function my_avatar( $email = 'aaaaa@aaaaaa.com', $size = '32', $default = '', $alt = '') {
// 设置$email默认值为一个不存在的aaaaa@aaaaaa.com
// 防止空的$email导致出错
$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';
// 如果要将头像缓存到当前主题目录下,请将上面3行代码改成:
// $a = get_bloginfo('template_url') . '/avatar/'. $f . $size . '.png';
// $e = get_template_directory() . '/avatar/' . $f . $size . '.png';
// $d = get_template_directory() . '/avatar/' . $f . '-d.png';
if($default=='')
$default = 'https://www.ludou.org/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);
}
使用方法
1、在wp-content目录下新建一个目录,命名为avatar,权限设为755;如果选择头像缓存到当前主题下,请在当前主题目录下,请在当前主题目录下新建一个目录,命名为avatar,权限设为755;
2、将以上代码放到当前主题function.php的最后一个 ?> 的前面
3、以上代码第13行换成你本地的默认头像地址
4、这里默认头像大小是 32*32,可在以上代码第1行更改
5、在需要使用Gavatar头像的地方调用 my_avatar 函数即可。一般在主题所有文件中,将 get_avatar 函数替换为 my_avatar 。有个例外,functions.php评论列表函数中:
get_avatar( $comment
需要改成:
my_avatar( $comment->comment_author_email
因为my_avatar函数只能通过Email来调取用户头像,所以以上情况,需要将第一个参数改成email地址。
— 完 —
类别:WordPress开发、
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
评论功能已经关闭!