昨天提到了 WordPress 使用 Facebook 帳號登入的技術。
不過預設的版本中,還有許多不好的設定。
如:每次登入都會把個人資料洗掉於是,我就想要來「修改」看看。
當然,最後是做出裡想的效果!
於是,這是就分享一下我的修改方法。
首先,打開插件目錄裡面的 common.php
接著找到下面的函式:
function fbc_userinfo_to_wp_user($userinfo) {
return array(
'display_name' => fbc_get_displayname($userinfo),
'user_url' => fbc_make_public_url($userinfo),
'user_email' => $userinfo['proxied_email'],
'first_name' => $userinfo['first_name'],
'last_name' => $userinfo['last_name'],
);
}
在其下新增一個新的函式,來調整被修改的項目。
function fbc_userinfo_to_wp_user_user($userinfo) {
return array(
'first_name' => $userinfo['first_name'],
'last_name' => $userinfo['last_name'],
);
}
在這裡,弦只讓姓氏和名字在每次登入被更新(預設是 信箱、網站、顯示名稱、姓氏、名字)
如此一來,使用 Facebook 登入者,在留言時就可以依照喜好設定暱稱、個人網站、信箱。
接著尋找下面這句語法:
if (username_exists($fbusername)) {
並且把這句語法放到其前方
$userdata = fbc_userinfo_to_wp_user($userinfo);
接著要讓 $userdata 在新用戶時被更新完整資料
所以把前面的語法改成如下:
if (username_exists($fbusername)) {
return FBC_ERROR_USERNAME_EXISTS;
}else{
$userdata = fbc_userinfo_to_wp_user($userinfo);
}
而完成的函式應該如下:
function fbc_insert_user($fbuid) {
$userinfo = fbc_anon_api_client()->users_getInfo(array($fbuid),
fbc_userinfo_keys());
if ($userinfo === null) {
error_log('wp-fbconnect: empty query result for user ' . $fbuid);
}
$userinfo = $userinfo[0];
$fbusername = 'fb' . $fbuid;
$userdata = fbc_userinfo_to_wp_user_used($userinfo);
if (username_exists($fbusername)) {
return FBC_ERROR_USERNAME_EXISTS;
}else{
$userdata = fbc_userinfo_to_wp_user($userinfo);
}
$userdata['user_pass'] = wp_generate_password();
$userdata['user_login'] = $fbusername;
$wpuid = wp_insert_user($userdata);
if($wpuid) {
wp_update_user(array('ID' => $wpuid,
'role' => 'subscriber'));
update_usermeta($wpuid, 'fbuid', "$fbuid");
}
return $wpuid;
}
附註: WordPress 標籤解析關係, $fbusername 變數應為 $fbusername = ‘fb’ . $fbuid; (請小心)
如此一來,每次登入只有姓名會被改動,其餘都是正常。
*這樣也會更加方便!