Gravatar头像不显示完美解决方案

Gravatar头像不显示完美解决方案

有没有一种方案能完美的解决我们的这些烦恼呢?答案是肯定的。提升Wordpress的Gravatar头像加载速度进阶的方法就是将Gravatar头像的服务器变为国内的,放在国内知名公司的服务器上或者专业的CDN服务器上。经过测试我们发现多说调用的Gravatar头像可以正常显示。猜测可能多说可能为了用户的体验而架设了一台Gravatar国内的中转服务器,那么福音来了,只需短短几行代码就可以彻底告别Gravatar被墙的困扰。本篇文章就来介绍此种方法。

方案一:

打开wordpress程序目录的wp-includes文件夹,找到pluggable.php(WP4.2之前版本)打开,将大约2150至2157行:

  1. if ( is_ssl() ) {
  2. $host = 'https://secure.gravatar.com';
  3. else {
  4. if ( !emptyempty($email) )
  5. $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
  6. else
  7. $host = 'http://0.gravatar.com';
  8. }

替换为:

  1. if ( is_ssl() )
  2. $host = 'https://secure.gravatar.com';
  3. else
  4. $host = 'http://www.gravatar.com';

WP4.2之后版本,打开wordpress程序目录的wp-includes文件夹,打开link-template.php,将大约第3604行的:

  1. $url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );

修改为:

  1. $url = sprintf( 'http://cn.gravatar.com/avatar/%s', $email_hash );

方案二:

1、方法的原理是:官方Gravatar的头像所在的路径一般都是

  1. www.gravatar.com、0.gravatar.com、1.gravatar.com、2.gravatar.com

我们只需要将这些头像默认的URL换成多说的就行了。

2、打开主题下的functions.php 文件,将以下代码复制粘贴保存即可。

  1. //多说官方Gravatar头像调用
  2. function mytheme_get_avatar($avatar) {
  3. $avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"gravatar.duoshuo.com",$avatar);
  4. return $avatar;
  5. }
  6. add_filter( 'get_avatar', 'mytheme_get_avatar', 10, 3 );

3、更新多说代码。

加入上面的代码后,前台的用户头像都是正常显示的,但是后台的只显示非默认头像,不显示默认的头像,导致这个问题的原因是Wordpress后台默认头像强制设置成了mystery,并且这个参数似乎没有办法用钩子替换。

将以下代码添加在主题下的functions.php 文件中。

  1. //多说官方Gravatar头像调用
  2. function get_avatar_deadwood( $avatar ) {
  3. $avatar = preg_replace( "/http%3A%2F%2F\d.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D\d+/","mm",$avatar );
  4. $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.duoshuo.com",$avatar );
  5. return $avatar;
  6. }
  7. add_filter( 'get_avatar', 'get_avatar_deadwood' );

方案三:

官方Gravatar头像调用ssl头像链接 。

https还是没被墙的,而且速度还不错,直接调用这个最简单了。

如果你的网站启用了ssl则不需要了,否则functions.php 加入如下代码:

  1. //官方Gravatar头像调用ssl头像链接
  2. function get_ssl_avatar($avatar) {
  3. $avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&amp;.*/','<img class="avatar avatar-$2" src="https://secure.gravatar.com/avatar/$1?s=$2" alt="" width="$2" height="$2" />',$avatar);
  4. return $avatar;
  5. }
  6. add_filter('get_avatar', 'get_ssl_avatar');

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  3   博主  0

  1. avatar Han 0

    方法三简单粗暴