WordPress站点Gravatar头像本地化缓存最有效方法

投稿  龙笑天下 2017-06-06 07:36 阅读 116 次 评论 27 条

由于 Gravatar 头像被墙,导致头像加载很慢,因此在网上搜索“wordpress头像缓存优化”的方法,结果搜到的基本都是不太有效的,甚至是不可用的,偶然在露兜博客看到了一个方法,试用后,感觉非常完美,在此就分享出来供大家借鉴一二。

WordPress站点Gravatar头像本地化缓存最有效方法 WordPress 第1张

优化后的缓存代码

废话不多说,直接上代码:

  1. /**
  2.  * WordPress头像本地化缓存最有效方法 - 龙笑天下
  3.  * http://www.ilxtx.com/wordpress-gravatar-local-cache.html
  4.  */
  5. function my_avatar( $email = 'gravatarcache@ilxtx.com', $size = '32', $default = ''$alt = '') {
  6.   // 设置$email默认值为一个不存在的邮箱,如:gravatarcache@ilxtx.com
  7.   // 防止空的$email导致出错
  8.   $f = md5( strtolower$email ) );
  9.   // 以下代码将头像缓存到wp-content目录下
  10.   $a = WP_CONTENT_URL . '/avatar/'. $f . $size . '.png';
  11.   $e = WP_CONTENT_DIR . '/avatar/' . $f . $size . '.png';
  12.   $d = WP_CONTENT_DIR . '/avatar/' . $f . '-d.png';
  13.   // 如果要将头像缓存到当前主题目录下,请将11-13行代码改成:
  14.   // $a = get_bloginfo('template_url') . '/avatar/'. $f . $size . '.png';
  15.   // $e = get_template_directory() . '/avatar/' . $f . $size . '.png';
  16.   // $d = get_template_directory() . '/avatar/' . $f . '-d.png';
  17.   if($default=='')
  18.     $default = 'http://www.ilxtx.com/wp-content/themes/lxtx/images/gravatar.png';
  19.   $t = 2592000; // 缓存有效期30天, 这里单位:秒
  20.   if ( !is_file($e) || (time() - filemtime($e)) > $t ) {
  21.     if ( !is_file($d) || (time() - filemtime($d)) > $t ) {
  22.       // 验证是否有头像
  23.       $uri = 'http://www.gravatar.com/avatar/' . $f . '?d=404';
  24.       $headers = @get_headers($uri);
  25.       if (!preg_match("|200|"$headers[0])) {
  26.         // 没有头像,则新建一个空白文件作为标记
  27.         $handle = fopen($d, 'w');
  28.         fclose($handle);
  29.         $a = $default;
  30.       }
  31.       else {
  32.         // 有头像且不存在则更新
  33.         $r = get_option('avatar_rating');
  34.         $g = 'http://www.gravatar.com/avatar/'. $f. '?s='. $size. '&r=' . $r;
  35.         copy($g$e);
  36.       }
  37.     }
  38.     else {
  39.       $a = $default;
  40.     }
  41.   }
  42.   $avatar = "<img alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
  43.   return apply_filters('my_avatar', $avatar$email$size$default$alt);
  44. }

使用方法

  • 重要:在 wp-content 目录下新建一个目录,命名为 avatar,权限设为 755;如果选择头像缓存到当前主题下,请在当前主题目录下,请在当前主题目录下新建一个目录,命名为 avatar,权限设为 755;
  • 将以上代码放到当前主题 functions.php 的最后一个 ?> 的前面;
  • 以上代码第 20 行换成你本地的默认头像地址;
  • 这里默认头像大小是 32*32,可在以上代码第 1 行更改;
  • 在需要使用 Gavatar 头像的地方调用 my_avatar 函数即可。一般在主题所有文件中,将 get_avatar 函数替换为 my_avatar 。有个例外,functions.php评论列表函数中:get_avatar( $comment 需要改为 my_avatar( $comment->comment_author_email。因为 my_avatar 函数只能通过 Email 来调取用户头像,所以以上情况,需要将第一个参数改成 email 地址。

友情提示

这个新的头像调用函数 my_avatar 可以传递 alt 参数,因此可以不必另行使用其他函数来给这个  Gravatar  头像加  alt  标签了。比如评论者头像的输入可以参考以下代码:

  1. <?php echo my_avatar( $comment->comment_author_email,50,$default='',$comment->comment_author); ?>

其中 50 表示这个头像的大小是 50*50,alt 属性值就是评论者昵称。

文章标签: ,   ,  
原文地址:http://www.ilxtx.com/wordpress-gravatar-local-cache.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
WordPress免费响应式主题:Nana

发表评论


表情

  1. 拽立网
    拽立网 【农民】 @回复

    你这头像本地缓存不错,我还是用自己的头像本地缓存代码
    !如果加上这2句代码更完美!
    if (!is_dir(‘avatar’)) //判断是否有缓存目录
    mkdir(‘avatar’, 0755, true); //否者创建头像缓存目录
    这样就不用手动去wp-content 目录新建avatar文件夹了!

    • 拽立网
      拽立网 【农民】2017-06-09 14:07  回复

      @拽立网补充是要这样写才对!wp-content 目录新建avatar文件夹了
      if (!is_dir(‘wp-content/avatar’)) //判断是否有缓存目录
      mkdir(‘wp-content/avatar’, 0755, true); //否者创建头像缓存目录

      • boke112导航
        boke112导航【站长】2017-06-09 15:14  回复

        @拽立网[赞] 我都是直接集成在主题里面,建立文件夹也是很简单的时候,所以是人工还是用命令就看个人喜欢了

  2. 深圳电脑维修
    深圳电脑维修 【市长】 @回复

    本地化缓存最好!

  3. 拿着灼热的铁
    拿着灼热的铁 【村长】 @回复

    看起来不错的样子……

  4. 地理沙龙
    地理沙龙 【村长】 @回复

    好的,学习了

  5. 钱探子导航
    钱探子导航 【镇长】 @回复

    不错用得到,以前玩zblog,现在开始学Wordpress了 [鼓掌]

  6. 我要网赚
    我要网赚 【市长】 @回复

    你的博客有广告吗,给我介绍个

    • boke112导航
      boke112导航【站长】2017-06-07 11:28  回复

      @我要网赚[疑问] 有广告位出售,点击本页面的标题下方的“投放广告联系”或侧边栏的广告招租图片广告即可看到广告位详细介绍

  7. xedgo
    xedgo 【农民】 @回复

    我用的是v2ex的cdn,速度很快,可以审查元素看我的

  8. 闲鱼
    闲鱼 【县长】 @回复

    用的缓存还好,就没搞本地了

  9. 雅兮网
    雅兮网 【省长】 @回复

    楼下说的对 不调用头像最省心 [嘻嘻]

  10. 夏天烤洋芋
    夏天烤洋芋 【县长】 @回复

    不调用头像其实最好。简洁

  11. videoclub
    videoclub 【省长】 @回复

    不错
    我一般都不管
    主题自带的

  12. 靠谱学生兼职网
    靠谱学生兼职网 【市长】 @回复

    代码不错啊。先收藏起来。

  13. 爱时尚
    爱时尚 【省长】 @回复

    我其实也挺想用七牛的,但是我怕他跟多说一样,说倒就倒

    • boke112导航
      boke112导航【站长】2017-06-06 09:25  回复

      @爱时尚七牛应该还是可以的,毕竟它也是有收入来源的。不过感觉还是放在本地比较安全

  14. 明月登楼
    明月登楼 【总理】 @回复

    自从用了七牛缓存头像后,我从来不担心头像载入的问题了! [阴险]

    • boke112导航
      boke112导航【站长】2017-06-06 09:26  回复

      @明月登楼[给力] 我用的是本地头像缓存问题,也不担心头像载入问题

      • 明月登楼
        明月登楼 【总理】2017-06-06 17:42  回复

        @boke112导航这种本地头像缓存成功与否取决于服务器对Gravatar服务器访问开不开放的问题了!有些服务器就没法使用,并且很容易因HTTP调用而拖慢网页载入时间!总之就是对服务器的HTTP请求开放度有很大的依赖性!

  15. 小苍老师
    小苍老师 【县长】 @回复

    Gravatar头像速度还可以嗒!

  16. 王商博客
    王商博客 【县长】 @回复

    感觉现在 Gravatar 头像的加载已经很快了

    • boke112导航
      boke112导航【站长】2017-06-06 09:27  回复

      @王商博客是的,现在gravatar头像速度还是不错的,特别是开着本地缓存,或者其他途径,好像就算是直接获取,好像速度也还不错