因為鸚鵡把 WordPress 的內建迴響關閉,改使用 Facebook 的留言框 (Comments Plugin),所以開始想把那張預設的站長大頭貼換掉,卻發現 WordPress 是連結 Gravatar 服務,要更換就得註冊 Gravatar 帳號。換臉書照片又得換一次 Gravatar 的,想到就麻煩。
不想透過外掛的方式,就直接上網搜尋了一下,是有找到一些修改方法可以使用本地圖片或其他指定圖片,但一樣還是得要兩邊都更新。
所以稍微研究了一下 WordPress 的 Hook 機制,也看了 get_avatar() 的說明和原始碼,搞懂後寫了一小段程式碼來解決。修改完成後 WordPress 上會直接顯示自己臉書的大頭貼,在 Facebook 上更新大頭貼照後,也會同步顯示最新的照片。
事前準備:
- 自己的 Facebook ID
連結到 findmyfbid.com 填上自己的臉書頁面網址,再按下 Find numeric ID 按鈕 - 自己登入 WordPress 的帳號登記的 E-Mail,管理界面 的 帳號 中可以找到
- 上面的帳號在資料庫中的 ID,這個鸚鵡目前只知道要從資料庫中查看(通常是1)
開啟使用的佈景主題中的 functions.php 檔案,在檔案最後新增以下程式
將 @EMAIL@、@ID@、@FACEBOOK_ID@ 分別置換的您的 E-Mail、帳號ID、Facebook ID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function get_avatar_facebook ($avatar, $id_or_email, $args) { if( ($id_or_email == "@EMAIL@" || $id_or_email == @ID@) && empty($args['default']) ) { $fbId = '@FACEBOOK_ID@'; $URL = 'http://graph.facebook.com/%s/picture?width=%d&height=%d'; $url = sprintf( $URL, $fbId, $args['width'], $args['height'] ); $url2x = sprintf( $URL, $fbId, $args['width'] * 2, $args['height'] * 2 ); $url3x = sprintf( $URL, $fbId, $args['width'] * 3, $args['height'] * 3 ); if( is_null($args['class']) ) $args['class'] = array( 'avatar', 'avatar-'.$args['size'], 'photo' ); return sprintf( "<img alt='%s' src='%s' srcset='%s, %s' class='%s' height='%d' width='%d' %s/>", esc_attr( $args['alt'] ), esc_url( $url ), esc_attr( "$url2x 2x" ), esc_attr( "$url3x 3x" ), esc_attr( is_array($args['class'] ) ? join( ' ', $args['class'] ) : $args['class'] ), $args['height'], $args['width'], $args['extra_attr'] ); } return $avatar; } add_filter('pre_get_avatar', 'get_avatar_facebook', 1, 3); |
存檔上傳,應該就可已將 WordPress 全站(包含管理界面)的大頭貼換成臉書的了