WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

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', 'filter_function_name_1858', 10, 3 );
function filter_function_name_1858( $errors, $sanitized_user_login, $user_email ){
	// Изменяем набор ошибок...

	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, чтобы встряхнуть форму при появлении этой ошибки.

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

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

Где используется хук (в ядре WP)

Использование не найдено.
campusboy 3315youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Редакторы: Kama 7452
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться