# wpmu_validate_user_signup()

URL: https://chugunov.pro/api-wordpress/functions/wpmu_validate_user_signup/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: MU (3.0.0).

## Сигнатура

```php
wpmu_validate_user_signup( string $user_name, string $user_email ): array
```

## Описание

Проверяет корректность и уникальность имён пользователей и адресов электронной почты, а также сверяет адреса электронной почты с разрешёнными и запрещёнными доменами, заданными администраторами.
Хук 'wpmu_validate_user_signup' даёт простой способ изменить процесс регистрации. Передаваемое в хук значение $result содержит как введённые пользователем данные, так и сообщения об ошибках, сформированные функцией. 'wpmu_validate_user_signup' позволяет обработать данные любым удобным способом и при необходимости снять соответствующие ошибки.

## Параметры

- `$user_name` `string` — обязательный. Логин, указанный пользователем.
- `$user_email` `string` — обязательный. Адрес электронной почты, указанный пользователем.

## Возвращаемое значение

`array` — user_name stringОчищенное и уникальное имя пользователя. orig_username stringИсходное имя пользователя. user_email stringАдрес электронной почты пользователя. errors WP_ErrorWP_Error объект, содержащий найденные ошибки.

## Исходный код

Файл: `wp-includes/ms-functions.php:468`

```php
function wpmu_validate_user_signup( $user_name, $user_email ) {
	global $wpdb;

	$errors = new WP_Error();

	$orig_username = $user_name;
	$user_name     = preg_replace( '/\s+/', '', sanitize_user( $user_name, true ) );

	if ( $user_name !== $orig_username || preg_match( '/[^a-z0-9]/', $user_name ) ) {
		$errors->add( 'user_name', __( 'Usernames can only contain lowercase letters (a-z) and numbers.' ) );
		$user_name = $orig_username;
	}

	$user_email = sanitize_email( $user_email );

	if ( empty( $user_name ) ) {
		$errors->add( 'user_name', __( 'Please enter a username.' ) );
	}

	$illegal_names = get_site_option( 'illegal_names' );

	if ( ! is_array( $illegal_names ) ) {
		$illegal_names = array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator' );
		add_site_option( 'illegal_names', $illegal_names );
	}

	if ( in_array( $user_name, $illegal_names, true ) ) {
		$errors->add( 'user_name', __( 'Sorry, that username is not allowed.' ) );
	}

	/** This filter is documented in wp-includes/user.php */
	$illegal_logins = (array) apply_filters( 'illegal_user_logins', array() );

	if ( in_array( strtolower( $user_name ), array_map( 'strtolower', $illegal_logins ), true ) ) {
		$errors->add( 'user_name', __( 'Sorry, that username is not allowed.' ) );
	}

	if ( ! is_email( $user_email ) ) {
		$errors->add( 'user_email', __( 'Please enter a valid email address.' ) );
	} elseif ( is_email_address_unsafe( $user_email ) ) {
		$errors->add( 'user_email', __( 'You cannot use that email address to signup. There are problems with them blocking some emails from WordPress. Please use another email provider.' ) );
	}

	if ( strlen( $user_name ) < 4 ) {
		$errors->add( 'user_name', __( 'Username must be at least 4 characters.' ) );
	}

	if ( strlen( $user_name ) > 60 ) {
		$errors->add( 'user_name', __( 'Username may not be longer than 60 characters.' ) );
	}

	// All numeric?
	if ( preg_match( '/^[0-9]*$/', $user_name ) ) {
		$errors->add( 'user_name', __( 'Sorry, usernames must have letters too!' ) );
	}

	$limited_email_domains = get_site_option( 'limited_email_domains' );

	if ( is_array( $limited_email_domains ) && ! empty( $limited_email_domains ) ) {
		$limited_email_domains = array_map( 'strtolower', $limited_email_domains );
		$email_domain          = strtolower( substr( $user_email, 1 + strpos( $user_email, '@' ) ) );

		if ( ! in_array( $email_domain, $limited_email_domains, true ) ) {
			$errors->add( 'user_email', __( 'Sorry, that email address is not allowed!' ) );
		}
	}

	// Check if the username has been used already.
	if ( username_exists( $user_name ) ) {
		$errors->add( 'user_name', __( 'Sorry, that username already exists!' ) );
	}

	// Check if the email address has been used already.
	if ( email_exists( $user_email ) ) {
		$errors->add(
			'user_email',
			sprintf(
				/* translators: %s: Link to the login page. */
				__( '<strong>Error:</strong> This email address is already registered. <a href="%s">Log in</a> with this address or choose another one.' ),
				wp_login_url()
			)
		);
	}

	// Has someone already signed up for this username?
	$signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE user_login = %s", $user_name ) );
	if ( $signup instanceof stdClass ) {
		$registered_at = mysql2date( 'U', $signup->registered );
		$now           = time();
		$diff          = $now - $registered_at;
		// If registered more than two days ago, cancel registration and let this signup go through.
		if ( $diff > 2 * DAY_IN_SECONDS ) {
			$wpdb->delete( $wpdb->signups, array( 'user_login' => $user_name ) );
		} else {
			$errors->add( 'user_name', __( 'That username is currently reserved but may be available in a couple of days.' ) );
		}
	}

	$signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE user_email = %s", $user_email ) );
	if ( $signup instanceof stdClass ) {
		$diff = time() - mysql2date( 'U', $signup->registered );
		// If registered more than two days ago, cancel registration and let this signup go through.
		if ( $diff > 2 * DAY_IN_SECONDS ) {
			$wpdb->delete( $wpdb->signups, array( 'user_email' => $user_email ) );
		} else {
			$errors->add( 'user_email', __( 'That email address is pending activation and is not available for new registration. If you made a previous attempt with this email address, please check your inbox for an activation email. If left unconfirmed, it will become available in a couple of days.' ) );
		}
	}

	$result = array(
		'user_name'     => $user_name,
		'orig_username' => $orig_username,
		'user_email'    => $user_email,
		'errors'        => $errors,
	);

	/**
	 * Filters the validated user registration details.
	 *
	 * This does not allow you to override the username or email of the user during
	 * registration. The values are solely used for validation and error handling.
	 *
	 * @since MU (3.0.0)
	 *
	 * @param array $result {
	 *     The array of user name, email, and the error messages.
	 *
	 *     @type string   $user_name     Sanitized and unique username.
	 *     @type string   $orig_username Original username.
	 *     @type string   $user_email    User email address.
	 *     @type WP_Error $errors        WP_Error object containing any errors found.
	 * }
	 */
	return apply_filters( 'wpmu_validate_user_signup', $result );
}
```

## История изменений

- MU (3.0.0) — Introduced.

## Связанные

Использует: [`sanitize_email`](https://chugunov.pro/api-wordpress/functions/sanitize_email/), [`is_email`](https://chugunov.pro/api-wordpress/functions/is_email/), [`sanitize_user`](https://chugunov.pro/api-wordpress/functions/sanitize_user/), [`wp_login_url`](https://chugunov.pro/api-wordpress/functions/wp_login_url/), [`mysql2date`](https://chugunov.pro/api-wordpress/functions/mysql2date/), [`add_site_option`](https://chugunov.pro/api-wordpress/functions/add_site_option/), [`username_exists`](https://chugunov.pro/api-wordpress/functions/username_exists/), [`email_exists`](https://chugunov.pro/api-wordpress/functions/email_exists/), [`is_email_address_unsafe`](https://chugunov.pro/api-wordpress/functions/is_email_address_unsafe/), `wpdb::get_row`, `wpdb::delete`, [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`get_site_option`](https://chugunov.pro/api-wordpress/functions/get_site_option/), `wpdb::prepare`, `WP_Error::__construct`.
Используется в: `WP_REST_Users_Controller::create_item`, [`validate_user_form`](https://chugunov.pro/api-wordpress/functions/validate_user_form/), [`validate_blog_signup`](https://chugunov.pro/api-wordpress/functions/validate_blog_signup/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wpmu_validate_user_signup/
