Gravatar頭像被墻完美解決方案

46

天津11选5走势图分析 www.lixcgb.com.cn 最近朽木所在的電信商把0.gravatar.com給墻J了,雖說啟用了多說的插件,但是后臺的工具條老是一個大的叉叉,網上提供的無非是緩存/插件/修改程序代碼,但是弊端很大,緩存的方式肯定要占用不必要的服務器資源,修改程序代碼的話,隨著Wordpress更新,每次都需要修改,朽木之前就是手動修改成了www.gravatar.com,參見Gravatar頭像分流服務被墻的糾結,但是被更新包覆蓋掉了。

朽木發現多說調用的頭像可以正常顯示,原來多說專門架設了一臺Gravatar的中轉服務器,為了節省帶寬那么他必然要啟用一定的緩存機制,那么Wordpresser們的福音來了,只需短短幾行代碼就可以徹底告別Gravatar別墻的困擾。

完美解決方案

gravatar-wordpress

編輯當前主題的functions.php文件,在底部加入

//頭像使用duoshuo緩存
function get_avatar_deadwood( $avatar ) {
  $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","//gravatar.duoshuo.com",$avatar );
  return $avatar;
}
add_filter( 'get_avatar', 'get_avatar_deadwood' );

從來沒有在多說上出現過的頭像會有一小會的延遲,不過緩存之后憑借著不到20MS的服務器速度,根本感覺不到頁面加載了大量頭像了。

近來gravatar被封殺的越來越厲害,大家全部都把流量“送給”多說也有點不人道,其實我們還可以用其他的第三方緩存例如https://ruby-china.www.lixcgb.com.cn 和 https://cdn.v2ex.com/gravatar/(前綴不一致,需修改代碼),另外官方的//cn.gravatar.com 和 https://secure.gravatar.com 也都是可用的,速度尚可。

后臺默認頭像顯示叉叉的解決辦法

加入上面的代碼后,前臺的用戶頭像都是正常顯示的,但是后臺的只顯示非默認頭像,不顯示默認的頭像,如果你沒有強迫癥的話不用繼續往下看了,導致這個問題的原因是Wordpress后臺默認頭像強制設置成了mystery,并且這個參數似乎沒有辦法用鉤子替換。

打開wp-includes/pluggable.php文件,你可以找到這樣一段代碼

	if ( 'mystery' == $default )
		$default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('[email protected]')

這段代碼的意思是如果默認頭像是mystery,那么就用[email protected]郵箱的頭像,我不知道這么奇葩的寫法究竟用意何在,而且一路更新下來,這段代碼依然健在。

實際上如果按照gravatar官方文檔來說mystery(神秘人)頭像作為默認頭像的調用寫法應該是這樣的

//cn.gravatar.com/avatar/07b979c71a73f11087a78102b320fe14?s=32&d=mystery&r=G&forcedefault=1

而Wordpress給我生成的是這樣的

//cn.gravatar.com/avatar/07b979c71a73f11087a78102b320fe14?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G&forcedefault=1

如果用戶沒有自定義頭像,它就會跳轉到0.gravatar.com去,但是這個域名在大陸已經死透了,所以它顯示了一個叉叉給我們。

解決辦法也很簡單,刪除了它也可以(注意下一行的elseif要改成if),修改一下廢了它也行,例如讓$default等于mystery或者mm(簡寫)。

	if ( 'mystery' == '2B' )
		$default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('[email protected]')

如果不想修改源文件或者害怕更新后被覆蓋,可以將上面加入functions.php的函數修改為

//頭像使用duoshuo緩存
function get_avatar_deadwood( $avatar ) {
  $avatar = preg_replace( "/http%3A%2F%2F\d.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D\d+/","mm",$avatar );
  $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","//gravatar.duoshuo.com",$avatar );
  return $avatar;
}
add_filter( 'get_avatar', 'get_avatar_deadwood' );

伸手黨也就算了,本來就是給大家用的,轉貼不留出處的請自重。

共 46 條評論

  1. 回復

    Test測試測試。。。。

  2. 回復

    額,用了多說的,我的雖然不是叉叉,但是是灰色的。感覺已經失效了//www.paotime.com/178.html

  3. 回復

    什么情況?

  4. 回復

    學習一下啊

  5. 回復

    是已經失效了么?

  6. 回復

    非常不錯,收藏

  7. 回復

    試額多次未果

  8. 回復

    很有效,而且很方便,寫的也詳細。

  9. 回復

    怎么我的后臺顯示 正常前臺不顯示呢

  10. 回復

    方法 不錯 果然有效 感謝博主

  11. 回復

    看到大家的Gravatar頭像被墻,我這里也提供一個用七牛搭建的Gravatar頭像緩存。
    七牛的速度我想大家也體驗過了吧!
    WordPress博客請將下面代碼添加到當前主題的functions.php文件中即可解決。

    function gravatar_cache( $avatar )
    {
    //=== Gravatar頭像緩存 ===//
    $avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","//7sbpvy.com1.z0.glb.clouddn.com",$avatar );
    $avatar = preg_replace( "/\?s\=/",".png?s=",$avatar );
    return $avatar;
    }
    add_filter( 'get_avatar', 'gravatar_cache' );

    不要感謝我,請叫我雷鋒??!

  12. 回復

    學習了,多謝分享經驗

  13. 回復

    已經使用,感謝分享

  14. 回復

    換上去了,轉址成功,還是不能載入,貌似失效了吧

    • 回復

      沒有失效,如果頭像沒有在多說緩存過,需要加載一下,過一會就好了。 這是樓下的頭像

      //gravatar.duoshuo.com/avatar/5727d42d5f4040d2edeb04ca768fb902?s=30&d=mm&r=G

  15. 回復

    找到這里了!謝謝!

  16. 回復

    早上發現頭像被封了,所以嘗試了下樓主的方式,問題是解決了,可是多說的頭像感覺是被裁剪壓縮過的,完全沒有以前的清晰了,沒辦法,先用著吧

  17. 回復

    試試,不知道還好使不~~

  18. 回復

    此方法已無效。。

  19. 回復

    帥呆了

  20. 回復

    嗯,木有頭像的就是個叉了

  21. 回復

    注冊不了Gravatar,用goagent的話老在提交密碼的時候掛掉,怎么辦~~求教

    • 回復

      適時轉為直接連接就可以了。

  22. 回復

    我這邊直接顯示叉叉!

  23. 回復

    如果使用了多說的話,不應該擔心這些東西了(畢竟,多說為了提供更好的服務器,這是他們應該考慮的事情),PS:這段代碼很經典~

  24. 回復

    嗯,分享了,嘿嘿。

  25. 回復

    好方法…

  26. 回復

    頭像只是一個好看!我沒有在乎過!

  27. 回復

    從wp論壇過來求鏈接的,我的博客前臺就是直接調用的gvatar頭像,我去測試一下 嘿嘿~如果可以的話 給我回復哦

  28. 回復

    這個挺不錯的,借用了~

  29. 回復

    不錯

發表評論

您的郵箱不會公開,當您的評論有新的回復時,會通過您填寫的郵箱向您發送評論內容。 必填字段 *

為何看不到我發布的評論?

正在提交, 請稍候...