LINE 登入外掛整合頭像顯示

目錄

近期終於把 LINE 登入外掛的頭像功能整合進去,現在只要使用登入就會自動取得 LINE 帳號的頭像作為網站個人帳號的顯示圖片。

一開始本來是想用 WordPress 內建的 Gravatar 來做,但由於使用者的頭像圖檔全都是放在 Gravatar 上面,資料庫只有紀錄預設的頭像設定而沒有存放圖檔,而 Gravatar 要透過 API 上傳頭像必須要經過 WP 後台的授權才能取得 API Key 來進行修改,但這樣就沒辦法放在商業外掛裡面來做了,如果要請每一位購買的顧客去申請 Gravatar API 這難度有點高…

如果你有特定網站要整合 Gravatar API,他們有提供 PHP SDK:https://www.phpclasses.org/browse/file/28639.html

Gravtar 這條路行不通只能換條路走,查 Codex 發現到這個勾點:pre_get_avatar_data

它會在 get_avatar() 取得圖片網址前觸發,因此我就可以把它替換成 LINE 的頭像網址,基本上用 LINE 的 CDN 網址就能結案了,比較棘手的是後台的顯示,個人頁的顯示還好判斷,而我卡在列表頁:

本以為可以跟文章列表一樣,只要替換 column 輸出的內容即可,但是使用者列表是用 manage_users_custom_column,看原始碼的寫法它只能新增欄位,無法去修改既有欄位的資料,還在想說是否要把原生欄位移掉,然後去新增一個自己的來顯示正確的頭像,看 Nextend Social Plugin 的寫法它還是有把頭像拉回來存,看來還是要比照辦理了。

覺得麻煩的當下,重新看了文件,意外發現勾點 pre_get_avatar_data 的第二個參數就是 user 相關的資料,至於具體會是什麼就要看實作這個勾點的人傳什麼進去,有以下六種類型:

  • user ID
  • Gravatar MD5 hash
  • user email
  • WP_User object
  • WP_Post object
  • WP_Comment object

因此要各別處理以取得正確的 user_id。除了 Gravatar MD5 hash 以外,我找不到該如何用它找回 user id 的方法,而我看 Nextend Social Plugin 也沒處理,之後遇到再說了。

程式碼實作如下:

<?php

/**
 * 替換頭像網址
 */

add_filter( 'pre_get_avatar_data', 'replace_avatar_url',10, 2 );
public function replace_avatar_url( $args, $id_or_email ) {

	if ( $id_or_email instanceof WP_User ) {
		$user_id = $id_or_email->ID;
	} elseif ( $id_or_email instanceof WP_Post ) {
		$user_id = $id_or_email->post_author;
	} elseif ( $id_or_email instanceof WP_Comment ) {
		$user_id = $id_or_email->user_id;
	} elseif ( strpos( $id_or_email, '@' ) !== false ) {
		$user_id = get_user_by( 'email', $id_or_email )->ID;
	} else {
		$user_id = $id_or_email;
	}

	// LINE 頭像網址欄位
	if ( get_field( 'line_user_avatar', 'user_' . $user_id ) ) {
		$args['url'] = get_field( 'line_user_avatar', 'user_' . $user_id );
	}

	return $args;

}

目錄

賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

覺得文章寫得好再幫我鼓個掌吧!

相關文章

ACF 的 JS API

需求是我要在刪除 Repeater 欄位的當下觸發 myCred 外掛扣點 API,也就是當點擊移除按鈕時,點選 Tooltip ...

WP Query 作者模糊搜尋

我需要的功能是在搜尋時可以輸入關鍵字找到特定作者的文章。由於 WP_Query 預設只能用 user...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2023 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!