没有Gravatar头像的显示随机头像

百度了很久始终没办法解决这个问题,后来请大神来帮忙解决了 分享给大家使用。
大伙儿肯定也很头疼用户没有Gravatar头像的,只能显示WordPress自带的头像,很不爽。

解决方案

若有Gravatar头像则显示Gravatar头像,没有就显示随机本地头像。

下面分享一段随机显示本地评论头像的代码,预先准备一些漂亮的图片代替WordPress自带的头像。
准备头像图片,在当前主题目录中新建一个名称为avatar的文件夹,所有图片格式为.jpg 例如里面放10张名称连续的jpg图片,比如1.jpg、2.jpg、3.jpg.........
将下面代码添加到当前主题functions.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
30
31
32
33
34
35
/**
* 有Gravatar头像则显示Gravatar头像,没有就显示随机本地头像
* By 北巷季 & BING
*/
function beixiang_get_random_locale_avatar( $hash ) {
$hash = ( hexdec( $hash[0] ) % 10 ) + 1;
return get_template_directory_uri() . '/avatar/' . $hash . '.jpg';
}
add_filter( 'get_avatar_url', function( $url, $id_or_email, $args ) {
if ( !preg_match( '/[a-f0-9]{32}/', $url, $matches ) )
return $url;

$hash = $matches[0];
$cache = '_has-avatar-' . $hash;

if ( ( $has = get_transient( $cache ) ) === false ) {
$link = 'https://cn.gravatar.com/avatar/' . $hash . '?d=404';
$response = wp_remote_head( $link, array( 'timeout' => 10 ) ); //10代表超时时间

if ( is_wp_error( $response ) ) {
$has = true;
set_transient( $cache, (int) $has, DAY_IN_SECONDS );
} else {
$has = wp_remote_retrieve_response_code( $response ) != 404;
set_transient( $cache, (int) $has, WEEK_IN_SECONDS );
}
} else {
$has = (bool) $has;
}

if ( $has )
return 'https://cn.gravatar.com/avatar/' . $hash . '?s=' . $args['size'];
else
return beixiang_get_random_locale_avatar( $hash );
}, 18, 3 );

每个没头像的用户固定的随机分配一个头像 不像外面教程一样 刷新网页就随机另一个头像了
你如果上传很多头像的文件夹 还得需要修改一下代码 因为:

邮箱经过hash之后会得到一个32位的16进制数,我把它转换成了10进制,然后用个位的数字+1得到图片名称
+1是为了避免0的出现 (当然也会有重复的头像)

如果不是十张的话要改计算方法,改成十进制除以张数+1得到余数;任何一个比较大的数,除以 20 都可以得到 0~19 的余数,然后再 +1 就好

完美解决没头像的用户随机添加本地头像.
本文章为“北巷季博客”原创;转载请注明地址,谢谢。

Loading ....
  • word天 评论于2017-09-01 01:43 回复

    我觉得这个可以弄个转载的链接上来,本来想转载这篇文章的,结果发现没有,只能放弃,给个提议,

    • 北巷季 评论于2017-09-01 04:05 回复

      这个其实有考虑过,也觉得没必要啦,如果真需要转载,打上来自我的博客就行了,我也欢迎别人转载

你目前的身份是游客,评论请输入昵称和电邮!