Intereting Posts

Могу ли я подключиться к регистрации пользователя * до того, как пользователь будет создан?

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

Я просмотрел источник в wp-includes/user.php , но ничего там не будет полезно. Я заметил фильтр pre_user_email , но, похоже, он не предлагает никаких вариантов для того, чтобы делать что-либо полезное, так как я не вижу способа сделать что-либо с этим.

Solutions Collecting From Web of "Могу ли я подключиться к регистрации пользователя * до того, как пользователь будет создан?"

Вы ищете не то место.

Когда пользователь сначала пытается зарегистрироваться, их имя пользователя и адрес электронной почты обрабатываются и дезинфицируются внутри функции register_new_user() в wp-login.php . Здесь вы хотите сделать свою фильтрацию.

Прежде чем пользователь будет создан, WordPress передаст дезинфицированный пользовательский логин, адрес электронной почты и массив или ошибки через действие register_post. Если после этого есть какие-либо ошибки, пользователь не добавляется, и они будут видеть ошибки в пользовательском интерфейсе.

Таким образом, следующая непроверенная функция может помочь:

 function prevent_email_domain( $user_login, $user_email, $errors ) { if ( strpos( $user_email, '@baddomain.com' ) != -1 ) { $errors->add( 'bad_email_domain', '<strong>ERROR</strong>: This email domain is not allowed.' ); } } add_action( 'register_post', 'prevent_email_domain', 10, 3 ); 

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

Если вы используете первый, их нет, поскольку вы будете иметь доступ к данным POST и быть ответственными за вызов wp_insert_user() или wp_create_user() и убедитесь, что все необходимые данные верны, т.е. имя пользователя, адрес электронной почты. ,

В последнем случае подключитесь к действию register_post . Это находится в wp-login.php внутри функции register_new_user() .

 /** * Code snippet... */ } elseif ( email_exists( $user_email ) ) { $errors->add( 'email_exists', __( '<strong>ERROR</strong>: This email is already registered, please choose another one.' ) ); } do_action( 'register_post', $sanitized_user_login, $user_email, $errors ); $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email ); /** rest of the code after... **/