首頁 後端開發 php教程 WordPress中Gravatar头像缓存到本地及相关优化的技巧

WordPress中Gravatar头像缓存到本地及相关优化的技巧

May 16, 2016 pm 08:02 PM
wordpress 最佳化 頭像

将Gravatar全球通用头像缓存的目的在于加快网站的打开速度,因为Gravatar官网的服务器在国外,加上伟大的GFW,国内打开速度经常很慢。方法来自willin,不过貌似他的网站已经打不开了

将Gravatar全球通用头像缓存到本地

缓存方法如下:

1.建立缓存目录
在WordPress根目录建立一个名为 avatar的文件夹,设置该文件夹的权限为 0755 (如果 0755 不行,就试一下 0777)。

2.设置默认头像
准备一张大小适合(32*32即可)的默认头像,命名为"default.jpg" ,放在 avatar 文件夹里面。

3.添加缓存代码
将下面的代码复制到主题的 functions.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('wpurl');
$e = ABSPATH .'avatar/'. $f .'.jpg';
$t = 1209600; //設定14天, 單位:秒
if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
copy(htmlspecialchars_decode($g), $e);
} else $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
if (filesize($e) < 500) copy($w.&#39;/avatar/default.jpg&#39;, $e);
return $avatar;
}
add_filter(&#39;get_avatar&#39;, &#39;my_avatar&#39;);
登入後複製

通过Email判断用户是否有Gravatar头像
很多时候,我们还需要知道用户有没有设置Gravatar,比如如果用户没有设置Gravatar头像则直接显示本地的默认头像,或者提醒没有设置Gravatar的用户设置Gravatar头像,而不打扰已经设置过头像的用户。今天分享的代码可以通过Email地址来验证用户是否有Gravatar头像:

function validate_gravatar($email) {
 $hash = md5(strtolower(trim($email)));
 $uri = &#39;http://www.gravatar.com/avatar/&#39; . $hash . &#39;?d=404&#39;;
 $headers = @get_headers($uri);
 if (!preg_match("|200|", $headers[0])) {
 $has_valid_avatar = FALSE;
 } else {
 $has_valid_avatar = TRUE;
 }
 return $has_valid_avatar;
}
登入後複製

Gravatar全球通用头像缓存优化

优化后的代码可以避免用户没有设置Gravatar头像时,默认头像重复缓存成多个文件造成资源浪费和重复连接的问题。优化后的代码如下

function my_avatar( $email, $size = &#39;32&#39;, $default = &#39;&#39;, $alt = &#39;&#39;) {
 $f = md5( strtolower( $email ) );
 // 以下代码将头像缓存到wp-content目录下
 $a = get_bloginfo(&#39;template_url&#39;) . &#39;/avatar/&#39;. $f . $size . &#39;.png&#39;;
 $e = get_template_directory() . &#39;/avatar/&#39; . $f . $size . &#39;.png&#39;;
 $d = get_template_directory() . &#39;/avatar/&#39; . $f . &#39;-d.png&#39;;
 // 如果要将头像缓存到当前主题目录下,请将3-5行代码改成:
 // $a = get_bloginfo(&#39;template_url&#39;) . &#39;/avatar/&#39;. $f . $size . &#39;.png&#39;;
 // $e = get_template_directory() . &#39;/avatar/&#39; . $f . $size . &#39;.png&#39;;
 // $d = get_template_directory() . &#39;/avatar/&#39; . $f . &#39;-d.png&#39;;

if($default==&#39;&#39;)
  $default = get_bloginfo(&#39;wpurl&#39;).&#39;avatar/default.jpg&#39;;
 
 $t = 2592000; // 缓存有效期30天, 这里单位:秒
 if ( !is_file($e) || (time() - filemtime($e)) > $t ) {
  if ( !is_file($d) || (time() - filemtime($d)) > $t ) {
   // 验证是否有头像
   $uri = &#39;http://www.gravatar.com/avatar/&#39; . $f . &#39;?d=404&#39;;
   $headers = @get_headers($uri);
   if (!preg_match("|200|", $headers[0])) {
    // 没有头像,则新建一个空白文件作为标记
    $handle = fopen($d, &#39;w&#39;);
    fclose($handle);
    $a = $default;
   }
   else {
    // 有头像且不存在则更新
    $r = get_option(&#39;avatar_rating&#39;);
    $g = &#39;http://www.gravatar.com/avatar/&#39;. $f. &#39;?s=&#39;. $size. &#39;&r=&#39; . $r;
    copy($g, $e);
   }
  }
  else {
   $a = $default;
  }
 }
 
 $avatar = "";
 return apply_filters(&#39;my_avatar&#39;, $avatar, $email, $size, $default, $alt);
}
登入後複製

使用这个方法需要在主题所有文件中,将 get_avatar 函数替换为 my_avatar 。
而且如果是

get_avatar( $comment,
登入後複製

格式的话,还需要改成

my_avatar( $comment->comment_author_email
登入後複製

因为my_avatar函数只能通过Email来调取用户头像,所以以上情况,需要将第一个参数改成email地址。

更多相关教程请访问   php编程从入门到精通全套视频教程

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP 與 Flutter 的比較:行動裝置開發的最佳選擇 PHP 與 Flutter 的比較:行動裝置開發的最佳選擇 May 06, 2024 pm 10:45 PM

PHP 與 Flutter 的比較:行動裝置開發的最佳選擇

wordpress文章在哪個資料夾 wordpress文章在哪個資料夾 Apr 16, 2024 am 10:29 AM

wordpress文章在哪個資料夾

wordpress模板檔案在哪 wordpress模板檔案在哪 Apr 16, 2024 am 11:00 AM

wordpress模板檔案在哪

wordpress哪個版本穩定 wordpress哪個版本穩定 Apr 16, 2024 am 10:54 AM

wordpress哪個版本穩定

wordpress需要備案嗎 wordpress需要備案嗎 Apr 16, 2024 pm 12:07 PM

wordpress需要備案嗎

wordpress如何刪除主題模板 wordpress如何刪除主題模板 Apr 16, 2024 am 02:36 AM

wordpress如何刪除主題模板

C++ 程式最佳化:時間複雜度降低技巧 C++ 程式最佳化:時間複雜度降低技巧 Jun 01, 2024 am 11:19 AM

C++ 程式最佳化:時間複雜度降低技巧

Win11 Canary 26231預覽版頭像隱藏特性怎麼體驗? Win11 Canary 26231預覽版頭像隱藏特性怎麼體驗? Jun 25, 2024 pm 10:58 PM

Win11 Canary 26231預覽版頭像隱藏特性怎麼體驗?

See all articles