私は、ユーザーのuser_loginを変更するというajaxによるシステム作業を行っています。これが私のコードです。
$wpdb->update($wpdb->users, array('user_login' => sanitize_text_field($args['user_login'])), array('ID' => $user_id));
User_loginが変更された後、WordPressはこのユーザーをログアウトさせるので、user_loginが変更された後にwp_signonを使用しようとしますが、動作していません。
再ログインを機能させるためにユーザーキャッシュをクリアする必要があるのと同じようなことを試みたときに、私は気付きました(非常にイライラするテストの後に!)
wp_cache_delete($user_id, 'users');
wp_cache_delete($old_user_login, 'userlogins'); // maybe unnecessary?
$creds = array('user_login' => $user_login, 'user_password' => $user_password, 'remember' => true);
wp_signon($creds);
これを機能させるには、$user_password
フィールドにプレーンテキストのパスワードを入力してwp_signon
に入力できるように、ユーザーに同時にパスワードの変更も必要になる場合があります。