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

31 янв. 2013 г., 02:03:31
Просмотры: 15.6K
Голосов: 7

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

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

2
Комментарии

Похожие вопросы: https://wordpress.stackexchange.com/q/95300, https://wordpress.stackexchange.com/q/167554

That Brazilian Guy That Brazilian Guy
31 дек. 2018 г. 01:23:10

Отличная, исчерпывающая статья: https://usersinsights.com/wordpress-user-registration-hooks-visualized/

That Brazilian Guy That Brazilian Guy
31 дек. 2018 г. 01:23:25
Все ответы на вопрос 2
2
15

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

Когда пользователь впервые пытается зарегистрироваться, его имя пользователя и email обрабатываются и очищаются внутри функции 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>ОШИБКА</strong>: Этот домен электронной почты не разрешён.' );
    }
}
add_action( 'register_post', 'prevent_email_domain', 10, 3 );
31 янв. 2013 г. 02:32:00
Комментарии

В чем разница между фильтром "registration_errors" и действием "register_post"?

Jalali Shakib Jalali Shakib
9 апр. 2018 г. 09:37:04

Действие register_post позволяет запускать другую функциональность до создания пользователя. Фильтр registration_errors позволяет добавить "ошибку" в функциональность и полностью прервать процесс регистрации.

EAMann EAMann
9 апр. 2018 г. 17:00:34
0

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

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

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

/**
 * Фрагмент кода...
 */
 } elseif ( email_exists( $user_email ) ) {
    $errors->add( 'email_exists', __( '<strong>ОШИБКА</strong>: Этот email уже зарегистрирован, пожалуйста, выберите другой.' ) );
}

do_action( 'register_post', $sanitized_user_login, $user_email, $errors );

$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );

/** остальной код после... **/
31 янв. 2013 г. 02:29:14