Поддержка Проблемы и решения Как создать и сразу авторизовать юзера?

  • Как после wp_insert_user() сразу авторизовать пользователя?
    Я пробую что-то такое, но это не работает:

    function custom_registration() {
    	$userdata = array(
    		'user_login' => $_POST['user_login'],
    		'user_pass'  => $_POST['user_pass'],
    		'user_email' => $_POST['user_email']
    	);
    
    	$user_id = wp_insert_user( $userdata );
    	if( !is_wp_error( $user_id ) ) {	
    		wp_clear_auth_cookie();
    		wp_set_current_user ( $user_id );
    		wp_set_auth_cookie  ( $user_id );
    		$redirect_to = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
    		wp_safe_redirect($redirect_to);
    		exit;
    	} else {	
    		$redirect_to = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
    		wp_safe_redirect($redirect_to);
    		exit;
    	} 
    }

    Так же я пробовал черезwp_signon() и некоторые другие способы, и я не могу понять, почему оно отказывается работать

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Для начала стоит проверить, что возвращает каждая из вызываемых функций, и какая именно строка не работает.

    wp_insert_user возвращает id, сама форма работает, пользователь создаётся.
    Как его теперь авторизовать, зная id?

    Конечно, я нашёл решение — вместо того, чтобы вызывать где-либо эту функцию, повесил на хук after_setup_theme и проверяю, отправлен ли запрос POST с заданным ключом, тогда это работает.

    add_action( 'after_setup_theme', 'custom_registration' );
    function custom_registration() {
    	if(isset($_POST["wp-submit"])) {
    		$userdata = array(
    			'user_login' => $_POST['user_login'],
    			'user_pass'  => $_POST['user_pass'],
    			'user_email' => $_POST['user_email']
    		);
    
    		$user_id = wp_insert_user( $userdata );
    
    		$login_data = array();
    		$login_data['user_login'] = $_POST['user_login'];
    		$login_data['user_password'] = $_POST['user_pass'];
    
    		$user = wp_signon( $login_data, false );
    
    		wp_clear_auth_cookie();
    		wp_set_current_user($user->ID);
    		wp_set_auth_cookie($user->ID, true);
    		$cuser = wp_get_current_user();
    	}
    }
Просмотр 3 ответов — с 1 по 3 (всего 3)