Регистрация нового пользователя в WordPress: функция register_new_user()

# Функция register_new_user() в WordPress

Функция register_new_user() предназначена для регистрации нового пользователя в WordPress. Эта функция позволяет создать нового пользователя, проверяя данные, которые были введены.

## Используемые функции

Функция register_new_user() основывается на других функциях, таких как:

- wp_create_user()

## Хуки, используемые в функции

- user_registration_email
- illegal_user_logins
- register_post
- registration_errors
- register_new_user

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

Функция возвращает либо ID пользователя, либо ошибку в случае неудачи.

## Как использовать

### Синтаксис

```php
register_new_user( $user_login, $user_email );
  • $user_login (строка, обязательный) — имя пользователя для входа.
  • $user_email (строка, обязательный) — адрес электронной почты для отправки пароля и подтверждения регистрации.

Примеры использования

Пример 1: Регистрация пользователя из формы

$user_login = isset( $_POST['user_login'] ) ? $_POST['user_login'] : '';
$user_email = isset( $_POST['user_email'] ) ? $_POST['user_email'] : '';

$user_id = register_new_user( $user_login, $user_email );

if ( ! is_wp_error( $user_id ) ) {
    $redirect_to = !empty( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : 'wp-login.php?checkemail=registered';
    wp_safe_redirect( $redirect_to );
}

Пример 2: Создание пользователя с именем "test" и e-mail

register_new_user( 'test', 'test@example.com' );

Код функции register_new_user()

Вот пример реализации функции:

function register_new_user( $user_login, $user_email ) {
    $errors = new WP_Error();
    $sanitized_user_login = sanitize_user( $user_login );

    // Фильтруем адрес электронной почты пользователя.
    $user_email = apply_filters( 'user_registration_email', $user_email );

    // Проверка имени пользователя.
    if ( '' === $sanitized_user_login ) {
        $errors->add( 'empty_username', __( 'Ошибка: Пожалуйста, введите имя пользователя.' ) );
    } elseif ( ! validate_username( $user_login ) ) {
        $errors->add( 'invalid_username', __( 'Ошибка: Это имя пользователя недопустимо, так как содержит недопустимые символы. Пожалуйста, введите корректное имя пользователя.' ) );
        $sanitized_user_login = '';
    } elseif ( username_exists( $sanitized_user_login ) ) {
        $errors->add( 'username_exists', __( 'Ошибка: Это имя пользователя уже зарегистрировано. Пожалуйста, вы��ерите другое.' ) );
    } else {
        $illegal_user_logins = (array) apply_filters( 'illegal_user_logins', array() );
        if ( in_array( strtolower( $sanitized_user_login ), array_map( 'strtolower', $illegal_user_logins ), true ) ) {
            $errors->add( 'invalid_username', __( 'Ошибка: Извините, это имя пользователя недопустимо.' ) );
        }
    }

    // Проверка адреса электронной почты.
    if ( '' === $user_email ) {
        $errors->add( 'empty_email', __( 'Ошибка: Пожалуйста, введите адрес электронной почты.' ) );
    } elseif ( ! is_email( $user_email ) ) {
        $errors->add( 'invalid_email', __( 'Ошибка: Адрес электронной почты неверен.' ) );
        $user_email = '';
    } elseif ( email_exists( $user_email ) ) {
        $errors->add(
            'email_exists',
            sprintf(
                __( 'Ошибка: Этот адрес электронной почты уже зарегистрирован. Войдите с этим адресом или выберите другой.' ),
                wp_login_url()
            )
        );
    }

    // Определяем ошибки и заканчиваем регистрацию, если они есть.
    $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );

    if ( $errors->has_errors() ) {
        return $errors;
    }

    $user_pass = wp_generate_password( 12, false );
    $user_id   = wp_create_user( $sanitized_user_login, $user_pass, $user_email );
    if ( ! $user_id || is_wp_error( $user_id ) ) {
        $errors->add(
            'registerfail',
            sprintf(
                __( 'Ошибка: Не удалось зарегистрироваться... пожалуйста, свяжитесь с администратором сайта!' ),
                get_option( 'admin_email' )
            )
        );
        return $errors;
    }

    update_user_meta( $user_id, 'default_password_nag', true ); // Уведомление о смене пароля.

    if ( ! empty( $_COOKIE['wp_lang'] ) ) {
        $wp_lang = sanitize_text_field( $_COOKIE['wp_lang'] );
        if ( in_array( $wp_lang, get_available_languages(), true ) ) {
            update_user_meta( $user_id, 'locale', $wp_lang ); // Установить язык пользователя, если он задан при регистрации.
        }
    }

    do_action( 'register_new_user', $user_id );

    return $user_id;
}

Связанные функции

В WordPress также есть другие функции для работы с пользователями, такие как:

  • wp_get_session_token()
  • wp_lostpassword_url()
  • wp_new_user_notification()
  • wp_delete_user()
  • wp_insert_user()
  • wp_update_user()

Эти функции помогут вам управлять пользователями на вашем сайте.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *