WordPress随机显示本地头像,禁止gravatar头像并且替换为本地链接

无需插件,只用几行代码就完美解决了这个问题,也省去了各种烦恼。主要功能为:如果用户上传了头像则显示为已经上传头像,没有上传头像则显示为本地随机头像,具体效果可以参考本站。

gravatar头像虽然为全球通用头像,但不符合众多国人的常规审美,看着一堆丑丑的头像龟速加载出来,实在让人心塞。遇到网速不好或者其他原因时,网站“破图”也让站长十分困扰。为此各位大佬奉献了不同的解决方法,归纳如下:

  1. 使用SSL头像链接:https://secure.gravatar.com/avatar/,但终归还是gravatar头像,服务器在国外,不能彻底解决。
  2. 把gravatar头像缓存到本地服务器,此方法可以解决gravatar头像的加载缓慢问题,但解决不了头像丑陋的问题。
  3. 使用反代原理,重置gravatar的头像源,常用的头像源CDN地址有:https://secure.gravatar.com/avatar ; https://cn.gravatar.com/avatar ; https://gravatar.wp-china-yes.net/avatar ; https://fdn.geekzu.org/avatar ;加载速度是3种方案里面最优选择,但依然解决不了奇奇怪怪的头像。
  4. 使用插件,目前有好多插件可以解决头像丑陋和加载速度问题,但缺点也相对明显,插件和主题直接的兼容性不尽如人意。

基于上面的各种尝试后,我们无需插件,只用几行代码就完美解决了这个问题,也省去了gravatar头像的各种烦恼。主要功能为:如果用户上传了头像则显示为已经上传头像,没有上传头像则替换为本地随机头像,具体效果可以参考本站。

第一步:准备用户头像

用户头像不易太大,尺寸为100px*100px即可,头像的大小只有2kb左右,不影响网站的加载速度。头像用数字命名,分别为1.jpg;2.jpg;3.jpg……,所有头像放入文件夹avatar中,把文件夹上传到主题目录中,主题路径为:域名/wp-content/themes/主题名称。本文为您准备了70个头像,可以直接下载使用。

第二步:添加代码

在主题的function.php文件的末尾加入下面的代码,代码中需要修改两处:

  1. 把代码中的“yunqikan”改为您的域名即可。
  2. mt_rand(1, 10)中数字为随机图片张数可以自行修改。

注意:如果您不想修改代码,那么可以用文末所附的升级版源码,但会稍微拖慢网站的加载速度。

//自定义随机调用本地头像

add_filter( 'get_avatar' , 'local_random_avatar' , 1 , 5 );
function local_random_avatar( $avatar, $id_or_email, $size, $default, $alt) {
    
	if ( is_numeric($id_or_email)){
		$user_id = (int) $id_or_email;
	} elseif ( is_string( $id_or_email ) && ( $user = get_user_by( 'email', $id_or_email ))){
		$user_id = $user->ID;
	} elseif ( is_object( $id_or_email ) && ! empty( $id_or_email->user_id )){
		$user_id = (int) $id_or_email->user_id;
	}
	
	
	$url = ''. get_avatar_url($user_id); 
	if (strpos($url,"yunqikan.cn") == true){
	    $avatar_url_local=1;
	}


	if ( !empty($user_id) && $avatar_url_local == 1){
        $avatar = ''. get_avatar_url($user_id); 
	    }
	else {
        $random = mt_rand(1, 50);
        $avatar = ''.get_template_directory_uri().'/avatar/'. $random .'.jpg';
    }

    $avatar = "<img alt='{$alt}' src='{$avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    return $avatar;
}

为了方便懒人,这里附上【升级版】代码,供大家参考指正。

//自定义随机调用本地头像

add_filter( 'get_avatar' , 'local_random_avatar' , 1 , 5 );
function local_random_avatar( $avatar, $id_or_email, $size, $default, $alt) {
    
	if ( is_numeric($id_or_email)){
		$user_id = (int) $id_or_email;
	} elseif ( is_string( $id_or_email ) && ( $user = get_user_by( 'email', $id_or_email ))){
		$user_id = $user->ID;
	} elseif ( is_object( $id_or_email ) && ! empty( $id_or_email->user_id )){
		$user_id = (int) $id_or_email->user_id;
	}
	
    $url = home_url();
    $url_s = strtolower($url);  //转成小写
    $hosts = parse_url($url_s);
    $host = $hosts['host'];
    //查看是几级域名
    $data = explode('.', $host);
    $n = count($data);
    //判断是否是双后缀
    $preg = '/[\w].+\.(com|net|org|gov|edu)\.cn$/';
    if(($n > 2) && preg_match($preg,$host)){
    //双后缀取后3位
    $host = $data[$n-3].'.'.$data[$n-2].'.'.$data[$n-1];
    }else{
    //非双后缀取后两位
    $host = $data[$n-2].'.'.$data[$n-1];
    }


	$url = ''. get_avatar_url($user_id); 
	if (strpos($url,$host) == true){
	    $avatar_url_local=1;
	}


	if ( !empty($user_id) && $avatar_url_local == 1){
        $avatar = ''. get_avatar_url($user_id); 
	    }
	else {
        $random = mt_rand(1, 51);
        $avatar = ''.get_template_directory_uri().'/avatar/'. $random .'.jpg';
    }

    $avatar = "<img alt='{$alt}' src='{$avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    return $avatar;
}

本站所有内容,如有版权、侵权等问题,请及时联系本站做删除。发布者:云期刊,转载请注明出处:https://www.yunqikan.cn/6269.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

问答社区 在线客服
咨询电话

iphone 咨询热线:13001069197

服务时间:上午 9:00 至晚上 21:00

联系我们

QQ 技术:109033286

QQ 运维:3423710838

email 邮箱:drhxxkj@163.com

Qqun QQ交流群:808026766

分享本页
返回顶部
上云攻略全知道

企业上云,购买云服务器攻略帮您节省上云成本,价值千元 的上云攻略,让您省到就是赚到!

查看详情