made password change:

function pmpro_change_password($user_id, $user_data) { global $wpdb, $current_user; require_once( ABSPATH . WPINC . '/class-phpass.php'); $user = get_userdata($user_id); if($user_data['new_password'] != $user_data['old_password']) { if($user_data['new_password'] == $user_data['new_password_repl']) { $pass_hash = wp_hash_password($user_data['new_password']); $old_pass_hash = wp_hash_password($user_data['old_password']); $wp_hasher = new PasswordHash(8, TRUE); $user = get_user_by('id', $user_id); if($wp_hasher->CheckPassword(trim($user_data['old_password']), $user->user_pass)) { wp_set_password($user_data['new_password'], $user_id); $_POST = array(); echo 'Пароль изменен!'; }else{ echo "No, Wrong Password"; $_POST = array(); } } else { echo 'Пароли не совпадают!'; } } else { echo 'Пароль не должен совпадать с текущим!'; } } 

everything changes fine but one thing but. if you update or switch to another page, you will need to log in again. How can I immediately authorize?

    1 answer 1

     <?php /** * Програмный логин пользователя * * @param string $username * @return bool */ function mihdan_programmatic_login( $username ) { if ( is_user_logged_in() ) { wp_logout(); } add_filter( 'authenticate', 'allow_programmatic_login', 10, 3 ); $user = wp_signon( array( 'user_login' => $username ) ); remove_filter( 'authenticate', 'allow_programmatic_login', 10, 3 ); if ( is_a( $user, 'WP_User' ) ) { wp_set_current_user( $user->ID, $user->user_login ); if ( is_user_logged_in() ) { return true; } } return false; } /** * Патчим коллбэк фильтра 'authenticate', позволяя входить, * указываяя только username * * @param WP_User $user * @param string $username * @param string $password * @return bool|WP_User */ function allow_programmatic_login( $user, $username, $password ) { return get_user_by( 'login', $username ); } 

    It is very simple to use, just call the function mihdan_programmatic_login in the right place, passing it the username as an argument:

     mihdan_programmatic_login('mihdan'); 
    • I do not understand where to write it. to the plugin file? - Tsyklop
    • Add this function next to your pmpro_change_password() . Inside pmpro_change_password() call mihdan_programmatic_login( $username ); in the right place mihdan_programmatic_login( $username ); - mihdan
    • you still need to log in again. - Tsyklop
    • one
      This approach is used on not one dozen sites, you are obviously doing something wrong - mihdan
    • Give the full code with my additions, for example, gist on github or codepen - mihdan