1

フロントエンドでパスワードを変更し、wp_user_update関数を使用していますが、ユーザーがパスワードを変更するとログアウトされました。問題は、古い Cookie が更新されていないことです。ログアウトせずにパスワードを更新する方法はありますか?

global $wpdb, $current_user;

$user_id =  $current_user->ID;
wp_update_user(array('ID'=>$user_id,'user_pass'=>$_POST['user_pass']));
4

1 に答える 1

1

WordPress サポートのAaron Forgueによる回答は 3 年前のものですが、興味深いかもしれません。私はそれを機能させるために変更しなければなりませんでし$wpdb->query()た:

global $wpdb;

$profile_id = $_POST['prof_id'];
$username = $_POST['log_name'];
$password = $_POST['wachtwoord'];
$md5password = wp_hash_password($password);

// You may want to use $wpdb->prepare() here. As it stands, malicous code could be passed in via $_POST['prof_id'] or $_POST['log_name']
$wpdb->query( $wpdb->prepare( 
        "
            UPDATE $wpdb->users SET user_pass = %s WHERE ID = %d
        ", 
        $md5password, 
        $profile_id 
    ) );

// Here is the magic:
wp_cache_delete($profile_id, 'users');
wp_cache_delete($username, 'userlogins'); // This might be an issue for how you are doing it. Presumably you'd need to run this for the ORIGINAL user login name, not the new one.
wp_logout();
wp_signon(array('user_login' => $username, 'user_password' => $password));

クレジットは、上記のトリックのこのプラグインに送られます: http://wordpress.org/extend/plugins/change-password-e-mail/

Robahasが述べたように、ヘッダーが送信される前にこのコードが実行されていることを確認してください。そうしwp_signon()ないと、機能せず、とにかくユーザーがログアウトされます。

于 2015-03-11T13:15:52.720 に答える