国内Gravatar头像被墙解决方法

国内Gravatar头像被墙解决方法

作者 : 资源客 发布时间: 2019-12-24

Gravatar 是 Globally Recognized Avatar 的缩写,是 gravatar 推出的一项服务,意为“全球通用头像”。如果在 Gravatar 的服务器上放置了你自己的头像,那么在任何支持 Gravatar 的 blog 或者留言本上留言时,只要提供你与这个头像关联的 email 地址,就能够显示出你的 Gravatar 头像来。自从谷歌被墙,越来越多的知名国外服务器无法正常访问!Gravatar 头像服务也被屏蔽了,wordpress 头像显示自然是不行了,速度慢,解决方案如下:

使用 https 方式(SSL)调用 Gravatar 头服务器地址,https 还是没被墙的,而且速度还不错,直接调用这个最简单了。如果你的网站启用了 ssl 则不需要了,否则 functions.php 加入如下代码

    function get_ssl_avatar($avatar) {
    $avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://secure.gravatar.com/avatar/$1?s=$2" class="avatar avatar-$2" height="$2" width="$2">',$avatar);
    return $avatar;
    }
    add_filter('get_avatar', 'get_ssl_avatar');

简单稳定,当头像特别大时速度可能略慢
使用 Gravatar Fixed 头像修正插件,插件设置页面,将 Gravatar 服务器和 Gravatar SSL 服务器,全部改为:https://secure.gravatar.com,插件下载页面 http://wpceo.com/gravatar-fixed/

本地缓存

下面的代码加到 functions.php 中

    function my_avatar($avatar) {
    $tmp = strpos($avatar, 'http');
    $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
    $tmp = strpos($g, 'avatar/') + 7;
    $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
    $w = get_bloginfo('wpurl');
    $e = ABSPATH .'avatar/'. $f .'.jpg';
    $t = 1209600; //设定14天, 单位:秒
    if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //当头像不存在或者超过了14天才会更新
    copy(htmlspecialchars_decode($g), $e);
    } else  $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
    if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);
    return $avatar;
    }
    add_filter('get_avatar', 'my_avatar');

在 WordPress 安装根目(即跟 wp-content 等文件夹同一目录下)下新建一个名为 avatar 的文件夹 ,并给予写权限。放入一张同尺寸的头像图片命名为 default.jpg。

多说缓存

注:多说部分头像会被回源,导致无法显示,所以也不推荐这个方案,下面的代码加到 functions.php 中

    function duoshuo_avatar($avatar) {
    $avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"gravatar.duoshuo.com",$avatar);
    return $avatar;
    }
    add_filter( 'get_avatar', 'duoshuo_avatar', 10, 3 );

多说服务器稳定性不是太好,有时候会出现失效的现象。

另一个比较特别方法

打开 wordpress 程序根目录的 wp-includes 文件夹,找到 pluggable.php 打开,将大约 2150 至 2157 行:

    if ( is_ssl() ) {
        $host = ‘https://secure.gravatar.com‘;
    } else {
        if ( !emptyempty($email) )
            $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
        else
            $host = ‘http://0.gravatar.com‘;
    }

替换为:

    $host = 'https://secure.gravatar.com';

或者(支持头像缓存插件)

    $host = 'http://cn.gravatar.com';

不过这个方法的弊端是下次更新程序的时候,文件会被覆盖掉。以上方法主要针对使用用国内主机用户,使用国外主机这时优势突显,并不需要修改任何东西,安装头像缓存插件,将头像缓存到本地,并不影响正常使用。
最后:以上方法主要针对国内主机,使用国外的主机就没必要修改这些了。选择适合自己的方法

http://xzh.i3geek.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途及非法用途,否则后果自负!
3. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"qq301.com",如遇到无法解压的请联系管理员!
资源客是一个优秀的分享资源站,本站资源均为各位友友分享而来,特殊原创会标明如有侵犯版权等可联系删除

资源客 » 国内Gravatar头像被墙解决方法