WP-FBConnect 改造簡記(登入更新資料修正)

昨天提到了 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; (請小心)

如此一來,每次登入只有姓名會被改動,其餘都是正常。
*這樣也會更加方便!

Comments are closed.