私は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から通常の
https://codex.wordpress.org/Function_Reference/wp_loginによると 'wp_login()'は推奨されていません。今は長い間非難されています。この環境的な証拠をPlugin1の作者の態度と組み合わせて、そのプラグインの使用を止める時が来たかもしれません。 –
@JamesJones 'wp_login()'関数が廃止予定の関数リストにないので、4.4.1から 'wp_login()'を完全に削除したと思っており、プラグインの作者は独自のカスタム ' wp_login() '関数を呼び出します。プラグイン1にフェアリーになるために、彼らのWordpressとそのプラグインは電子メールでログインする能力を広告していないので、本当に修正することはできません。代わりに、プラグイン2の作者は、それが欠陥を持っている彼らのプラグインであるので、それを修正する必要があります。 – Ryflex
私は現時点でそのプラグインから離れることはできません。メインプラグインを使用するプラグインが数多くあり、ロードを再コード化する必要があります。 –