WordPress自带评论头像无法显示(非Gravatar分流被墙)

去年年底换主机的时候,我就发现:博客文章页的评论里,那些没有上传Gravatar头像的访客,本应显示为后台“讨论”设置中勾选的“神秘人”头像:
神秘人

现在却全都无法显示。与其同时,在首页侧边栏展示的最新评论里却能显示正常(第4、5和倒数第2条。图片是我替换自定义的):
首页最新评论
复制文章页评论的头像链接(我注意到是0.gravatar.com打头)在网页中打开,会跳转到http://i0.wp.com/path_to_url并显示“The type of image you are trying to process is not allowed”;而复制首页最新评论中的头像链接(是1.gravatar.com打头)能打开图片。

WordPress的评论头像调用自Gravatar的服务器,上述情况我认为是0.gravatar.com这个分流服务器被GFW墙了(在WordPress 3.0.1后,为了加快头像载入的速度,WordPress会自动判断使用哪台Gravatar的分流服务器)的缘故。Gravatar的一些服务器长期被GFW墙着,但主服务器www.gravatar.com没有被墙。那么按照一般的办法,只要改为从主服务器上获取头像就能显示正常了。以“WordPress头像被墙”、“WordPress头像无法显示”等关键词进行搜索,能够找到很多提供具体解决方法的网帖和博文。

常见方法是在wp-includes/pluggable.php文件中找到约1631行,将:
if ( is_ssl() ) {
$host = ‘https://secure.gravatar.com’;
}
else {
if ( !empty($email) )
$host = sprintf(“http://%d.gravatar.com”, ( hexdec( $email_hash{0} ) % 2 ) );
else $host = ‘http://0.gravatar.com’;
}
替换为:
if ( is_ssl() )
$host = ‘https://secure.gravatar.com’;
else
$host = ‘http://www.gravatar.com’;

我就按照这个方法照做了,但是没有效果。虽然修改后文章页评论头像的图片地址由0.前缀变为www.前缀,但是依然会跳转到http://i0.wp.com/path_to_url并显示“The type of image you are trying to process is not allowed”。

为什么大家这么改都能成功而我不能啊摔!找遍中文圈子好像就我一个人出问题!

痛定思痛,投向外网。指望谷歌能搜索出英文用户们也有这种问题。虽然我英文水平很烂,但是依靠划词翻译,确定还是有老外存在跟我一样问题的(而且数量还不少),而后参考了比较有代表性的这三篇老外的网帖:
Gravatar “The type of image you are trying to process is not allowed”

can’t see default avatar on comments

Help! WordPress Comments showing broken Gravatar Image

内容就不一一赘述了,有兴趣的可以去看看。从上面得到启发后,我将主题文件function.php中第60行:
php echo get_avatar($comment,$size=’40’,$default=” );
修改为:
php echo get_avatar($comment,$size=’40’,$default='<path_to_url>’ );

没有抱太大希望(之前试了好多次各种办法),我刷新了一下网页,跳了起来——文章页面的评论头像终于显示正常了!并且此时我的wp-includes/pluggable.php文件已替换回原来的。不知道这样修改主题文件以后会不会出现其他问题,但总之目前这个评论头像不显示倒是解决了。

除非注明,本站所有文章均为原创,互联分享,尊重版权,转载请注明 .
原文链接: http://www.maomiya.com/broken-default-avatar.html
版权所有: 猫猫咪呀的博客

本文分类: WordPress | 标签: , ,
订阅更新: 您可以订阅我博客的内容.

上一篇:

4 人围观.

  1. 都没心思折腾WP了 想换简单一点的程序

  2. 其实WordPress博客的可以将下面代码添加到当前主题的functions.php文件中就可解决Gravatar头像不显示的问题。

    //=== Gravatar头像缓存 ===//
    function gravatar_cache($avatar){
    $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.hechaocheng.cn",$avatar );
    $avatar = preg_replace( "/\?s\=/",".png?s=",$avatar );
    return $avatar;}
    add_filter( 'get_avatar', 'gravatar_cache' );

评论..

[ Ctrl + Enter ]