主題整合了 WooCommerce+Buddypress+Bbpress 商城社群論壇,因為 www.gravatar.com 頭像被和諧,而網上對於解決頭像被和諧的程式碼都只是適合 WP 本身,對這些外掛沒有任何作用。 Buddypress 中成員、群組都需要設定頭像,也考慮到很多人並沒有註冊 gravatar 全球通用頭像,在社群個人檔案中可以上傳自定義頭像,所以把整站的頭像都本地化,以下程式碼可解決 WP 中任意的頭像本地化:

  1. function bp_remove_gravatar ($image, $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir) {
  2.     $default = get_stylesheet_directory_uri() .'/images/customGravatar.png';
  3.     if( $image && strpos( $image, "gravatar.com" ) ){
  4.         return '<img src="' . $default . '" alt="avatar" class="avatar" ' . $html_width . $html_height . ' />';
  5.     } else {
  6.         return $image;
  7.     }
  8. }
  9. add_filter('bp_core_fetch_avatar', 'bp_remove_gravatar', 1, 9 );
  10. function remove_gravatar ($avatar, $id_or_email, $size, $default, $alt) {
  11.     $default = get_stylesheet_directory_uri() .'/images/customGravatar.png';
  12.     return "<img alt='{$alt}' src='{$default}'  height='{$size}' width='{$size}' />";
  13. add_filter('get_avatar', 'remove_gravatar', 1, 5);
  14. function bp_remove_signup_gravatar ($image) {
  15.     $default = get_stylesheet_directory_uri() .'/images/customGravatar.png';
  16.     if( $image && strpos( $image, "gravatar.com" ) ){
  17.         return '<img src="' . $default . '" alt="avatar" class="avatar" width="auto" height="auto" />';
  18.     } else {
  19.         return $image;
  20.     }
  21. }

這樣當有新使用者註冊時,如果沒有新增頭像,不管有沒有註冊 gravatar 頭像,系統都會為其設定預設頭像,頭像都使用本地頭像,網站的速度也相對提高了不少。