Intereting Posts
Условия для одного сообщения Выбор цвета в виджетах появляется дважды при добавлении через Customizer Как получить страницу 2 / Paginated RSS Feed с пользовательской структурой Permalink? Как заменить textarea в плагине с помощью wp_editor Отключить редактор содержимого для конкретных страниц Ограничьте содержимое, введенное редактором или администратором в окне редактора администраторов WP Не удалось получить значение параметра для моего плагина Отображение прямых детей других страниц на главной странице Загружать изображения с одного сайта на другой в Multisite Какова политика создания темы, которая не поддерживает виджеты / меню? Как перемещать изображения Пользовательский тип сообщения администратора Где отредактировать шаблон, который генерирует код для левой стороны боковой панели dynamic_sidebar в теме Understrap? Host wordpress в подкаталоге приложения Rails WordPress с «некоторой» интернационализацией – лучшие варианты?

Авто вход после регистрации

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

Как я могу это сделать?

Solutions Collecting From Web of "Авто вход после регистрации"

Вот базовый подход.

Во-первых, вам нужно будет передать что-то в ссылке, чтобы предоставить некоторую информацию о пользователе, которую вы можете использовать для входа пользователя в систему. Для этого вам нужно отфильтровать письмо, которое отправляется пользователю. (Можно было бы фактически загрузить пользовательский новый электронный адрес регистрации пользователя, но это нужно было бы сделать как плагин, поскольку эта функция является подключаемой функцией. Вместо этого этот метод просто фильтрует содержимое электронной почты на основе строки темы для регистрации электронной почты.)

// Добавить фильтр для регистрации тела электронной почты

add_filter( 'wp_mail', 'set_up_auto_login_link' ); function set_up_auto_login_link( $atts ) { // if the email subject is "Your username and password" if ( isset ( $atts ['subject'] ) && $atts['subject'] = 'Your username and password' ) { if ( isset( $atts['message'] ) ) { $old = '/wp-login.php'; $new = '/wp-login.php?user=' . $_POST['user_login']; $atts['message'] = str_replace( $old, $new, $atts['message'] ); } } return $atts; } 

Это поместит выбранное имя пользователя из регистрационной формы в электронное письмо в виде строки запроса, добавленной в ссылку для входа. Это имя пользователя может использоваться для входа пользователя в систему, когда они нажимают на ссылку.

Для этого я подключился к действию init. Это проверит параметр «пользователь» в строке запроса. Если это существует, он использует get_user_by для получения пользовательских данных по их имени пользователя (логин). Если это возвращает действительного пользователя, мы можем использовать имя пользователя и полученный идентификатор пользователя, чтобы зарегистрировать пользователя в:

 add_action( 'init', 'log_user_in' ); function log_user_in() { if ( isset( $_GET['user'] ) ) { // get the username from the URL $user_login = $_GET['user']; // get the user data (need the ID for login) $user = get_user_by( 'login', $user_login ); // if a user is returned, log them in if ( $user && ! user_can( $user->ID, 'manage_options' ) ) { wp_set_current_user( $user->ID, $user_login ); wp_set_auth_cookie( $user->ID ); do_action( 'wp_login', $user_login ); wp_redirect( home_url() ); exit(); } } } 

Обратите внимание: этот процесс не дает вам реальной защиты, поскольку любой, у кого есть действительное имя пользователя, может войти в систему как этот пользователь. Он проверяет, чтобы пользователь, входящий в систему, не был администратором (user_can ('manage_options')), в противном случае любой пользователь с именем пользователя администратора мог бы получить доступ. Было бы разумно создать дополнительные проверки – возможно, создать ключ или хеш для добавления в ссылку, что-то сделанное при регистрации, которое может быть использовано для проверки пользователя.

 // Connect auto the new user $creds = array(); $creds['user_login'] = $nom; $creds['user_password'] = $pass; $creds['remember'] = false; $user = wp_signon( $creds, false );