更换 WordPress 评论的头像地址

默认情况下,Wordpress 会显示 Gravatar 的头像。Gravatar 头像相当于你的 QQ 头像,代表的就是你在网络的个人形象,所以各种社交程序都不能免除头像的使用。

在国内,显示比较慢或者直接超时(原因你懂的),在这种情况下,就得考虑是否要将头像修改成别的了。

这里有2种办法:一种是直接缓存图片到你自己的服务器,然后输出的时候替换成你服务器的地址。还有种就是利用多说的头像缓存,调用多说的地址来得到 Gravatar 头像。

第一种缓存 Gravatar 头像需要你的服务器能顺畅的连接到 Gravatar 的服务器。然后接下来需要在主题中的 functions.php 中添加以下内容:

<?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('home');
    $e = ABSPATH .'avatar/'. $f .'.jpg';
    $t = 1209600; //設定14天, 單位:秒   
    if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新   
        $get_file = request_file($g);
        $fp = @fopen($e, "w");
        @fwrite($fp,$get_file);
        fclose($fp);
    } 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');
function request_file($url){
    $ch = curl_init() ;
    curl_setopt($ch, CURLOPT_URL, $url) ;
    ob_start();
    curl_exec($ch);
    $result = ob_get_contents() ;
    ob_end_clean();
    curl_close($ch) ;
    return $result;
}

另一种方法就比较简单了,替换 Gravatar 的地址成多说的就好了。

function mytheme_get_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', 'mytheme_get_avatar', 10, 3 );
Last modification:March 2nd, 2018 at 12:05 pm
If you think my article is useful to you, please feel free to appreciate

17 comments

  1. Hintay

    现在是替换成secure.gravatar.com或者cn.gravatar.com比较好,现在也没被墙。其他的镜像或者缓存都不支持srcset特性(就是Retina和高分辨率)。

    1. Ryan
      @Hintay

      这两个目前已经不时的中断了,还是反代把

  2. 快乐家园

    自用国外v或七牛,又拍搭个镜像秒杀一切 :mrgreen:

  3. 无纯洁

    我打算自己去弄个Gravatar缓存镜像 :twisted:

    1. Ryan
      @无纯洁

      这个简单,nginx反代加设定缓存即可

  4. 羊会飞

    多说党表示Gravatar是浮云

    1. Ryan
      @羊会飞

      多说载入速度是问题

  5. BigCat

    多说用了插件应该就不用了吧

    1. Ryan
      @BigCat

      用了多说插件肯定不用了

  6. 老左博客

    有些时候Gravatar加载比较慢

    1. Ryan
      @老左博客

      慢起来根本不显示

  7. 路易大叔

    我也替换成多说了

  8. liuyanyk

    第一种方法在wordpress中可行,不知道emlog能不能用呀;第二种嘛,用了多说这个我只能不考虑了唉~

    1. Ryan
      @liuyanyk

      额,你用了多说啊

      1. liuyanyk
        @Ryan

        是因为我不用多说,所以不考虑的啦~

        1. Ryan
          @liuyanyk

          哦哦,我理解错了。你对多说有什么成见?

  9. 超級efly

    前來支持一下~~學習啦!! :-|

Leave a Comment