2016-01-07 7 views
17

私は2つのWordpress Pluginsを持っていますが、両方のプラグインの作者が自分のサイトであることを認めることを拒否しています。ユーザー名を正しく返すための関数を修正しました。

プラグインの作成者に、プラグインに何らかの悪影響を与えないようにしました.2人目のプラグインがインストールされているかどうかに問題はありませんが、それらのプラグインは異なるプラグインとの互換性を追加します。

私は2番目のプラグインを修正する方法を考え出すことができませんが、私は何をすべきか知っている...

プラグインの1からスニペット(私は修正への提供の一つ)

/* check if the user is valid */ 
if (true === wlm_admin_in_admin() || true === $special_bypass) { 
    $validuser = username_exists($data['username']); 

    if (! $validuser) { 
     $validuser  = email_exists($data['email']); 
     $user_info  = get_userdata($validuser); 
     $data['username'] = $user_info->user_login; 
    } 

    $data['password'] = __('Already assigned', 'wishlist-member'); 
} else { 
    $validuser = wp_login($data['username'], $data['password']); 
} 
if ($validuser) { 
    $user  = $this->Get_UserData(0, $data['username']); 
    /* check for blacklist status */ 
    $blacklist = $this->CheckBlackList($user->user_email); 
} 

、ライン見つけた場合:

$validuser = wp_login($data['username'], $data['password']); 

をし、それを置き換える:

//$validuser = wp_login($data['username'], $data['password']); 
$tmpvaliduser = username_exists($data['username']); 
if ($tmpvaliduser) 
    $validuser = wp_login($data['username'], $data['password']); 

if (! $validuser || !$tmpvaliduser) {  
    if((!$data['email']) && !(false === strrpos($data['username'], "@"))) { 
     $validuser  = email_exists($data['username']); 
     $user_info  = get_userdata($validuser); 
     $data['username'] = $user_info->user_login; 
     $validuser = wp_login($data['username'], $data['password']); 
    }  
} 

これで、$data['username']変数が実際のユーザー名に変更されるため、残りのプラグイン1が正しく継続され、電子メールで構成されたユーザー名ではなくユーザー名(アカウント)に特定の詳細がバインドされるため、ユーザ名が(彼らはユーザ名&パスワードでログインしようとした)が存在する場合、それは通常のように続けて)ユーザー名として

  • 存在しません。
  • usernameが存在しない場合は、電子メールが存在するかどうかを確認し、入力された電子メールアドレスからユーザー名を取得し、入力されたusernameフィールドを電子メールではなく実際のユーザー名で変更した後、私は上記のsnippitがいっぱいで何をするか、100%わからないんだけど、私は十分にそれを理解し
    function email_login_authenticate($user, $username, $password) { 
        if (is_a($user, 'WP_User')) 
         return $user; 
        if (!empty($username)) { 
         $user = get_user_by('email', $username); 
         if (isset($user, $user->user_login, $user->user_status) && 0 == (int) $user->user_status) { 
          $username = $user->user_login; 
         } 
         $result = wp_authenticate_username_password(null, $username, $password); 
         if (is_a ($result, 'WP_User')) { 
          global $WishListMemberInstance; 
          $WishListMemberInstance->WPMAutoLogin($user->ID); 
          $_POST['log'] = $username; 
          $WishListMemberInstance->Login(); 
         } 
        } 
        return wp_authenticate_username_password(null, $username, $password); 
    } 
    

    (私はのために修正が必要なことの一つ)のプラグイン2から通常の

スニペットのように続けますは正しいユーザー名を返します。何とかなるよう$data['username']は、ユーザー名の代わりに、(メールが使用されている場合)、電子メールまず

+3

https://codex.wordpress.org/Function_Reference/wp_loginによると 'wp_login()'は推奨されていません。今は長い間非難されています。この環境的な証拠をPlugin1の作者の態度と組み合わせて、そのプラグインの使用を止める時が来たかもしれません。 –

+0

@JamesJones 'wp_login()'関数が廃止予定の関数リストにないので、4.4.1から 'wp_login()'を完全に削除したと思っており、プラグインの作者は独自のカスタム ' wp_login() '関数を呼び出します。プラグイン1にフェアリーになるために、彼らのWordpressとそのプラグインは電子メールでログインする能力を広告していないので、本当に修正することはできません。代わりに、プラグイン2の作者は、それが欠陥を持っている彼らのプラグインであるので、それを修正する必要があります。 – Ryflex

+0

私は現時点でそのプラグインから離れることはできません。メインプラグインを使用するプラグインが数多くあり、ロードを再コード化する必要があります。 –

答えて

1

、私のwordpressのバージョン私のcentos6に

Name  : wordpress     Relocations: (not relocatable) 
Version  : 4.4        Vendor: Fedora Project 
Release  : 1.el6       Build Date: Wed 09 Dec 2015 11:40:49 AM EST 

プラグインに置き換えられます。(私のシステム上の)この関数は常に私が見つけた、WP_Errorも同様

/** 
* Authenticate the user using the username and password. 
* 
* @since 2.8.0 
* 
* @param WP_User|WP_Error|null $user  WP_User or WP_Error object from a previous callback. Default null. 
* @param string    $username Username for authentication. 
* @param string    $password Password for authentication. 
* @return WP_User|WP_Error WP_User on success, WP_Error on failure. 
*/ 
function wp_authenticate_username_password($user, $username, $password) { 

WP-電子メールのログインユーザーを返さないことを

/usr/share/wordpress/wp-content/plugins 

注意してください:4は、この場所にインストールされますあなたのために合うかもしれません:

http://plugins.svn.wordpress.org/wp-email-login/trunk/email-login.php

をより明確にするために、プラグイン2からの抜粋は、次のように変更します。

function email_login_authenticate($user, $username, $password) { 
    if (is_a($user, 'WP_User')) 
     return $user; 
    if (!empty($username)) { 


     // add this line to format email - propose change #1 
      $username = str_replace('&', '&', stripslashes($username)); 
     $user = get_user_by('email', $username); 
     if (isset($user, $user->user_login, $user->user_status) && 0 == (int) $user->user_status) { 
      $username = $user->user_login; 
     } 
     $result = wp_authenticate_username_password(null, $username, $password); 
     if (is_a ($result, 'WP_User')) { 
      // These 4 lines came from plugin2 from your system, keep as is 
      global $WishListMemberInstance; 
      $WishListMemberInstance->WPMAutoLogin($user->ID); 
      $_POST['log'] = $username; 
      $WishListMemberInstance->Login(); 
     } 


     // no need to authenticate another time, return - proposed change #2 
     // authenticate twice could be a problem as well 
     return $result; 
    } 
    return wp_authenticate_username_password(null, $username, $password); 
}