WordPress 头像本地化缓存最有效方法
由于 gravatar头像被墙,导致头像加载很慢,因此在网上搜索“wordpress 头像缓存优化”的方法,结…
由于 gravatar头像被墙,导致头像加载很慢,因此在网上搜索“wordpress 头像缓存优化”的方法,结果搜到的基本都是不有效,甚至是不可用的,偶然在露兜博客看到了一个方法,试用后,感觉非常完美,在此就分享出来供大家借鉴一二。
优化后的缓存代码
废话不多说,直接上代码:
/**
* WordPress 头像本地化缓存最有效方法 - 龙笑天下
* https://www.ilxtx.com/wordpress-gravatar-local-cache.html
*/
function dr_get_avatar( $email = 'gravatarcache@ilxtx.com', $size = '32', $default = '', $alt = '') {
// Gravatar 头像源,可自行修改
$gravatar_sever = 'dn-qiniu-avatar.qbox.me';
$gravatar_uri = 'https://'.$gravatar_sever;
// 设置$email 默认值为一个不存在的邮箱,如:gravatarcache@ilxtx.com,防止空的$email 导致出错
$f = md5( strtolower( $email ) );
// 以下代码将头像缓存到 wp-content 目录下
if ( !is_dir( WP_CONTENT_DIR.'/avatar' ) ) {
mkdir(WP_CONTENT_DIR.'/avatar', 0755, true);
}
$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 = 'https://www.ilxtx.com/wp-content/themes/lxtx/assets/images/gravatar.png';
}
$t = 2592000; // 缓存有效期 30 天, 这里单位:秒
if ( !is_file($e) || (time() - filemtime($e)) > $t ) {
if ( !is_file($d) || (time() - filemtime($d)) > $t ) {
// 验证是否有头像
$uri = $gravatar_uri.'/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 = $gravatar_uri.'/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('dr_get_avatar', $avatar, $email, $size, $default, $alt);
}
使用方法
- 重要:在 wp-content 目录下新建一个目录,命名为 avatar,权限设为 755;如果选择头像缓存到当前主题下,请在当前主题目录下,请在当前主题目录下新建一个目录,命名为 avatar,权限设为 755;
- 将以上代码放到当前主题 functions.php 的最后一个 ?> 的前面;
- 以上代码第 22 行换成你本地的默认头像地址;
- 这里默认头像大小是 32*32,可在以上代码第 1 行更改;
- 在需要使用 Gavatar 头像的地方调用 dr_get_avatar 函数即可。一般在主题所有文件中,将 get_avatar 函数替换为 dr_get_avatar。有个例外,functions.php 评论列表函数中:
get_avatar( $comment
需要改为dr_get_avatar( $comment->comment_author_email
。 - 上面代码里用到的 Gravatar 头像镜像源是
dn-qiniu-avatar.qbox.me
,如果你想替换为其他源的话,可以看此文:解决国内 Gravatar 头像被墙无法显示问题,另附 Gravatar 头像国内镜像源地址大全;
因为 dr_get_avatar 函数只能通过 Email 来调取用户头像,所以以上情况,需要将第一个参数改成 email 地址。
友情提示
这个新的头像调用函数 dr_get_avatar 可以传递 alt 参数,因此可以不必使用下文中这个给 gravatar 头像加 alt 标签的代码了:
不知道为什么,wordpress 几乎所有的博客头像标签都没加 alt!但是懂 SEO 的都知道,图片的 alt 属性是一定要加的,搜索引擎的爬虫是无法读取图片上到底是什么内容的,只能靠它的 alt 标…
另外,本站Dragon 主题已经自带集成了此功能,更加强大,欢迎购买体验:
Dragon 主题:Wordpress 商城会员多功能高级主题 V3.8.0[出售]
WordPress 个人博客 CMS 主题 Dragon,CMS、博客、自适应响应式、用户中心、商城,强大到窒息~
类别:WordPress函数讲解、
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!