修改函数以正确返回用户名,用于 wordpress 插件来自插件 1 的片段(我提供了修复的代码段)来自插件2的片段(我需要修复的一个)
我有两个Wordpress插件,插件的两位作者都拒绝承认冲突/问题是他们的网站,但很明显,双方都可以很容易地解决这个问题。
我向一位插件作者提供了修复程序,该修复程序不会以任何方式对其插件产生负面影响,如果该人是否安装了第二个插件,则不会造成任何问题,但即使该修复程序增加了与不同插件的兼容性,他们也不会将其添加到其插件中。
我无法弄清楚如何修复第二个插件,但我知道需要做什么......
来自插件 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'] );
}
}
然后,这解决了这个问题,因为它将变量更改为其实际用户名,这意味着插件1的其余部分将正确继续并将某些详细信息绑定到用户名(帐户),而不是由其电子邮件组成的用户名(显然不存在作为用户名)$data['username']
- 如果用户名存在(他们尝试使用用户名和密码登录),那么它会像往常一样继续。
- 如果用户名不存在,那么它会检查电子邮件是否存在,如果存在,那么它将从输入的电子邮件地址中获取用户名,然后只需使用其实际用户名而不是电子邮件更改输入的用户名字段,然后像往常一样继续
来自插件2的片段(我需要修复的一个)
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 );
}
我不是100%确定上面的截图完全做了什么,但我理解得很好,我需要改变它,以便它以某种方式返回正确的用户名,以便$data['username']
被替换为用户名而不是电子邮件(如果使用电子邮件)