registration_errorsхук-фильтрWP 2.1.0

Позволяет добавить свои проверки регистрации. Позволяет изменить тексты ошибок на странице регистрации.

Фильтр получает объект 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 пользователя.

Примеры

0

#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 Введена.

Где вызывается хук

register_new_user()
registration_errors
wp-includes/user.php 3407
$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );

Где используется хук в WordPress

Использование не найдено.