解决WordPress Gravatar 头像加载问题

1,151次阅读
3 条评论

共计 2945 个字符,预计需要花费 8 分钟才能阅读完成。

解决Wordpress Gravatar 头像加载问题

WordPress的自带Gravatar头像服务很不稳定,无法加载Gravatar会导致我们的网站前端及后台加载缓慢,体验很不好。

解决方式:

  1. 缓存本地化

  2. cdn加速 — 推荐

1.本地缓存

function dr_get_avatar( $email = '[email protected]', $size = '32', $default = '', $alt = '') {
  // Gravatar 头像源,可自行修改
  $gravatar_sever = 'gravatar.wp-china-yes.net';
  $gravatar_uri = 'https://'.$gravatar_sever;
​
  // 设置$email 默认值为一个不存在的邮箱,防止空的$email 导致出错
  $f = md5( strtolower( $email ) );
​
  // 以下代码将头像缓存到 wp-content 目录下
  if ( !is_dir( WP_CONTENT_DIR.'/avatar' ) ) {
      mkdir(WP_CONTENT_DIR.'/avatar', 0755, true);
  }
  $a = WP_CONTENT_URL.'/avatar/'. $f.$size.'.png';
  $e = WP_CONTENT_DIR.'/avatar/'. $f.$size.'.png';
  $d = WP_CONTENT_DIR.'/avatar/'. $f.'-d.png';
​
  if($default==''){
      $default = 'https://cravatar.cn/avatar/gravatar.png';
  }
​
  $t = 2592000; // 缓存有效期 30 天, 这里单位:秒
  if ( !is_file($e) || (time() - filemtime($e)) > $t ) {
      if ( !is_file($d) || (time() - filemtime($d)) > $t ) {
          // 验证是否有头像
          $uri = $gravatar_uri.'/avatar/'.$f.'?d=404';
          $headers = @get_headers($uri);
          if (!preg_match("|200|", $headers[0])) {
              // 没有头像,则新建一个空白文件作为标记
              $handle = fopen($d, 'w');
              fclose($handle);
​
              $a = $default;
          } else {
              // 有头像且不存在则更新
              $r = get_option('avatar_rating');
              $g = $gravatar_uri.'/avatar/'. $f.'?s='.$size.'&r='.$r;
              copy($g, $e);
          }
      } else {
          $a = $default;
      }
  }
​
  $avatar = "<img alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
​
  return apply_filters('dr_get_avatar', $avatar, $email, $size, $default, $alt);
}

 

此方法来源:龙笑天下-WordPress 头像本地化缓存最有效方法

2.CDN加速

if ( ! function_exists( 'get_cravatar_url' ) ) {
  /**
    * 替换 Gravatar 头像为 Cravatar 头像
    *
    * Cravatar 是 Gravatar 在中国的完美替代方案,你可以在 https://cravatar.cn 更新你的头像
    */   function get_cravatar_url( $url ) {
      $sources = array(
          'www.gravatar.com',
          '0.gravatar.com',
          '1.gravatar.com',
          '2.gravatar.com',
          'secure.gravatar.com',
          'cn.gravatar.com',
          'gravatar.com',
      );
​
      return str_replace( $sources, 'cravatar.cn', $url );
  }
​
  add_filter( 'um_user_avatar_url_filter', 'get_cravatar_url', 1 );
  add_filter( 'bp_gravatar_url', 'get_cravatar_url', 1 );
  add_filter( 'get_avatar_url', 'get_cravatar_url', 1 );
}
​
if ( ! function_exists( 'set_defaults_for_cravatar' ) ) {
  /**
    * 替换 WordPress 讨论设置中的默认头像
    */   function set_defaults_for_cravatar( $avatar_defaults ) {
      $avatar_defaults['gravatar_default'] = 'Cravatar 标志';
​
      return $avatar_defaults;
  }
​
  add_filter( 'avatar_defaults', 'set_defaults_for_cravatar', 1 );
}
​
if ( ! function_exists( 'set_user_profile_picture_for_cravatar' ) ) {
  /**
    * 替换个人资料卡中的头像上传地址
    */   function set_user_profile_picture_for_cravatar() {
      return '您可以在 Cravatar 修改您的资料图片';
  }
​
  add_filter( 'user_profile_picture_description', 'set_user_profile_picture_for_cravatar', 1 );
}

Gravatar 镜像地址整理

  1. [推荐]七牛镜像源 https://dn-qiniu-avatar.qbox.me/avatar/

  2. [推荐]WP-China-Yes 镜像源 https://gravatar.wp-china-yes.net/avatar/

  3. [推荐]极客族 https://sdn.geekzu.org/avatar/

  4. Gravatar官方 WWW 源 https://www.gravatar.com/avatar/

  5. Gravatar官方 CN 源 https://cn.gravatar.com/avatar/

  6. Gravatar官方 EN 源 https://en.gravatar.com/avatar/

  7. Gravatar官方 secure 源 https://secure.gravatar.com/avatar/

如果担心镜像源出问题,也可以利用nginx反代https://www.gravatar.com

正文完
 
World
版权声明:本站原创文章,由 World 2023-03-02发表,共计2945字。
转载说明:此文章非本站原创文章,若需转载请联系原作者获得转载授权。
评论(3 条评论)
青云梯 评论达人 LV.1
2023-04-12 15:37:45 回复

不错 谢谢博主

 Windows  Edge  美国加利福尼亚旧金山
沛霖主页 评论达人 LV.1
2023-03-02 11:50:57 回复

可以可以,感谢分享

 Windows  Chrome  中国上海上海市电信
sharp097 评论达人 LV.1
2023-03-02 03:22:03 回复

不错不错

 Windows  Chrome  澳大利亚