如何在不注销的情况下更改WordPress密码(需要插件)

时间:2015-05-05 作者:Ad2

我需要更改WP密码,无需注销配置文件。当我使用wp_set_password($password,$user_ID)时,我的注销有问题。

5 个回复
SO网友:liviucmg

如果您正在更改当前登录用户的密码,它会将您注销。您必须再次登录:

// Get current logged-in user.
$user = wp_get_current_user();

// Change password.
wp_set_password($new_password, $user->ID);

// Log-in again.
wp_set_auth_cookie($user->ID);
wp_set_current_user($user->ID);
do_action(\'wp_login\', $user->user_login, $user);
请注意,由于您正在设置新的登录cookie(即更改标头),因此需要在任何其他输出(HTML或echos)之前运行此代码。

SO网友:Mayur Chauhan

尝试下面的代码,它在更改密码后不会让您注销,而且它也可以与Ajax一起使用。此外,之后无需重置Cookie/session。

$userdata[\'ID\'] = 1; //user ID
$userdata[\'user_pass\'] = \'new_password\';
wp_update_user( $userdata ); // this will handle encryption and everything
干杯

SO网友:bueltge

我没有工作示例,只有思考这个主题的提示。通过core功能设置新密码的功能是正确的。但是,如果您在用户更新页面上使用此功能,则用户将自动注销,因为它正在删除已登录用户的缓存。

注销后,你能加入吗wp 并创建新登录名。在通过“标头”发送任何内容之前,必须执行此操作。

`add_action( \'wp\', \'your_login\' );`
还要考虑登录的cookie-wp_set_auth_cookie! 您还可以删除用户的当前缓存-wp_cache_delete().

也许是这个question 他的回答对你有帮助,同样的话题。

SO网友:Dragi Postolovski
function change_client_password() {
    $current_user     = $_POST[\'current_user\'];
    $current_password = $_POST[\'current_password\'];
    $new_password     = $_POST[\'new_password\'];
    $confirm_password = $_POST[\'confirm_password\'];
    $user             = get_user_by( \'ID\', $current_user );

    $result = wp_check_password( $current_password, $user->data->user_pass, $current_user );

    if ( $result ) {
        if ( $new_password == $confirm_password ) {
            wp_set_password( $new_password, $current_user );
            wp_set_auth_cookie ( $current_user );
            wp_set_current_user( $current_user );
            do_action(\'wp_login\', $user->user_login, $user );
            echo \'Your new password is changed.\';
        } else {
            echo \'Your current password is correct, but the new and confirm passwords do not match.\';
        }
    } else {
        echo \'Your current password is incorrect.\';
    }

    wp_die();
}
SO网友:Akel

使用wp\\u set\\u password()更新用户密码,然后使用wp\\u signon()重新登录用户。

正如其他用户所建议的那样,wp\\u signon将为您创建身份验证cookie,但方式要简化得多。

function create_new_password_for_user($new_password){
    //Get the current user\'s details, while they\'re still signed in, in this scope.
     $current_user = wp_get_current_user();
     $current_user_id = $current_user->ID;
     $users_login = $current_user->user_email;

    //set their new password (this will trigger the logout)
    wp_set_password($new_password, $current_user_id);

    //setup the data to be passed on to wp_signon
    $user_data = array(
            \'user_login\'     => $users_login,
            \'user_password\'    => $new_password,
            \'remember\'        => false
        );

    // Sign them back in.
    $result = wp_signon( $user_data );

    if(is_wp_error($result)){
      //do something with an error, if there is one.
    }else{
      //do something with the successful change. 
    }
}

结束

相关推荐

Login/logout in header

我正在查看当前的登录/注销/我的帐户/注册详细信息situated 从“我的菜单栏”下方到菜单栏上方。本质上,我想在标题后面添加细节。我需要向我的functions.php 在我的子主题中创建文件以使其正常工作?