wordpress功能集成(五):無插件實現頭像緩存

我想盡可能將全部wordpress過濾器的應用教程都放在一堆,wordpress的頭像都是有第三方網站提供的,這樣有有點也有缺點,缺點:有的地方打開gravatar比較慢,還有的人根本打不開這個網站,那樣的話,頭像都顯示不了,因此咱們將頭像圖片保存在網站服務器上,在訪客留言中輸出頭像以前,先檢查一下,服務器上是否已經保存了這個頭像文件?若是保存了就不用連接到gravatar網站了。 php

首先咱們須要知道wordpress是怎樣獲取頭像的,咱們獲取評論列表使用的函數爲:wp_list_comments(),該函數位於wp-includes/comment-template.php文件,這個函數中的代碼知識一些判斷代碼真正數去評論的是類Walker_Comment,這個類的定義也在comment-template.php文件,這個類中輸出頭像就是使用的get_avatar()函數,get_avatar函數位於wp-includes/pluggable.php文件中,函數用法爲: html

  1. <?php   
  2. echo get_avatar( $id_or_email$size$default$alt );   
  3. //$id_or_email爲用戶ID或E-mail或者一個comment object(評論對象)   
  4. //$size爲頭像大小,默認爲96   
  5. //$default一個頭像地址,默認就是那個mystery man(神祕人)   
  6. //$alt頭像的alt信息   
  7. ?>   

查看這個函數的源碼,看不全懂也不要緊,咱們只須要找圖片代碼,直接掃視,找到含全部<img字樣的地方就行了。很容易找到是: 緩存

  1. $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";   
  2. //其中$safe_alt / $out/$size分別是圖片alt信息,圖片url 圖片尺寸    

這裏的圖片src輸出以後將是 服務器

  1. http://0.gravatar.com/avatar/e8e2f0c1a4427b67567ad3d1b582a3ce?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3  

上面的url中 avatar/到?s之間的字符是根據評論者郵箱計算的md5散列,不過前面兩段的介紹可有可無,知識介紹一個頭像獲取的方法,咱們只須要關心最終的輸出,get_avatar函數的最後面提供了一個過濾器get_avatar,咱們須要經過這個過濾器來改變頭像的url,改變爲咱們服務器上緩存的圖片url。以下 app

  1. return apply_filters('get_avatar', $avatar$id_or_email$size$default$alt);  

既然它提供了最終的輸出過濾器,那麼咱們只須要在輸出以前修改這個url就行了。 wordpress

首先請在網站根目錄(或者其它你認爲合適的文件夾下)新建一個文件夾avatar,用來存放頭像文件。
修改代碼以下代碼: 函數

  1. function ashu_avatar($avatar) {      
  2.     //strpos函數計算$avatar中字符「http」的位置      
  3.     $tmp = strpos($avatar, 'http');      
  4.     //獲取src=""之間的字符串,即圖片的url      
  5.     $len = strpos($avatar"'"$tmp) - $tmp;      
  6.     $g = substr($avatar$tmp$len);      
  7.     //獲取url中avatar/ 到第一個?之間的字符串,即圖片文件名      
  8.     $tmp = strpos($g, 'avatar/') + 7;      
  9.     $len2 = strpos($g"?"$tmp) - $tmp;      
  10.     $f = substr($g$tmp$len2);      
  11.     //參數wpurl獲取wordpress的url地址(後臺設置的)      
  12.     $w = get_bloginfo('wpurl');      
  13.     //ABSPATH爲WordPress目錄的絕對路徑在wp-config.php中定義      
  14.     $e = ABSPATH .'avatar/'. $f .'.jpg';      
  15.     //7天=604800秒      
  16.     $t = 604900;       
  17.     //若是頭像文件不存在,或者文件存在超過$t=7天      
  18.     if ( !is_file($e) || (time() - filemtime($e)) > $t ) {      
  19.         //更新頭像文件..將$e拷貝到爲$g      
  20.         copy(htmlspecialchars_decode($g), $e);      
  21.     } else{      
  22.         //若是頭像文件存在且時間不超過7天,將原來圖片的url替換爲服務器上的圖片url      
  23.         $avatar = strtr($avatararray($g => $w.'/avatar/'.$f.'.jpg'));      
  24.     }      
  25.     //若是頭像文件小於500字節(下面這個我也不知道原做者是什麼意思)      
  26.     iffilesize($e) < 500 ){      
  27.         //將$e拷貝爲default.jpg      
  28.         copy($w.'/avatar/default.jpg', $e);      
  29.     }      
  30.     //返回$avatar      
  31.     return $avatar;      
  32. }      
  33. //添加過濾器函數ashu_avatar      
  34. add_filter('get_avatar', 'ashu_avatar');    

get_avatar函數不知一個過濾器哦,仍是那句話,盡情的查找,盡情的修改,盡情的折騰吧 網站

相關文章
相關標籤/搜索