registration_errors
Позволяет добавить свои проверки регистрации. Позволяет изменить тексты ошибок на странице регистрации.
Фильтр получает объект WP_Error, который может содержать ошибки (пользователь уже существует, почта невалидна и т.д.) или может быть пустым (не иметь ошибок). В обоих случаях объект WP_Error следует обязательно вернуть, иначе возникнет 500 ошибка.
Если WP_Error содержит данные, то регистрация пользователя будет прервана. Это позволяет добавить свои проверки регистрации и если нужно прервать регистрацию с ошибкой.
При успешной регистрации объект WP_Error пустой - имеет вид:
WP_Error Object ( [errors] => Array() [error_data] => Array() )
А так выглядит WP_Error при ошибках регистрации (например, не введены имя и почта):
WP_Error Object ( [errors] => Array ( [empty_username] => Array ( [0] => <strong>ОШИБКА</strong>: Пожалуйста, введите имя пользователя. ) [empty_email] => Array ( [0] => <strong>ОШИБКА</strong>: Пожалуйста, введите ваш адрес e-mail. ) ) [error_data] => Array() )
Использование
add_filter( 'registration_errors', 'wp_kama_registration_errors_filter', 10, 3 ); /** * Function for `registration_errors` filter-hook. * * @param WP_Error $errors A WP_Error object containing any errors encountered during registration. * @param string $sanitized_user_login User's username after it has been sanitized. * @param string $user_email User's email. * * @return WP_Error */ function wp_kama_registration_errors_filter( $errors, $sanitized_user_login, $user_email ){ // filter... return $errors; }
- $errors(WP_Error)
- Объект WP_Error, c ошибками регистрации или пустой.
- $sanitized_user_login(строка)
- Очищенное имя пользователя (username).
- $user_email(строка)
- Email пользователя.
Примеры
#1 Простой вариант защиты от спама при регистрации
Добавим чекбокс и проверим, был ли он отмечен. Если нет - выведем ошибку:
<?php add_filter( 'registration_errors', 'add_registration_errors' ); add_action( 'register_form', 'register_form_add_field' ); /** * Добавляет ошибку, если чекбокс при регистрации не был нажат. * * @param WP_Error $errors * * @return WP_Error */ function add_registration_errors( $errors ) { if ( filter_input( INPUT_POST, 'i-not-robot' ) !== 'yes' ) { $errors->add( 'robot_detected', '<strong>ОШИБКА</strong>: Роботам здесь не место!' ); } return $errors; } /** * Выводит чекбокс в дефолтной форме регистрации. * * @return void */ function register_form_add_field() { ?> <p> <label> <input type="checkbox" name="i-not-robot" value="yes"> Я человек! </label> </p> <br> <?php }
Используйте фильтр shake_error_codes, чтобы встряхнуть форму при появлении этой ошибки.
Список изменений
С версии 2.1.0 | Введена. |
Где вызывается хук
$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );