默认情况下,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 );