Создание пользователя с помощью wp_insert_user()

# WP_INSERT_USER() │ WP 2.0.0

Функция wp_insert_user() создает пользователя в базе данных WordPress.

**Внимание!** Не обновляйте пользователя с помощью этой функции — используйте wp_update_user().

### Почему нельзя обновлять с помощью wp_insert_user()

При использовании этой функции могут возникнуть проблемы:
- Пароль не шифруется и сохраняется в базе данных в открытом виде.
- Дата регистрации изменяется.
- Удаляется электронная почта, если она не указана.

### Важные нюансы

- Все логические значения в параметрах должны передаваться как строки: 'true' или 'false', так как именно так они записаны в мета-полях.
- Длина поля user_url ограничена 100 символами (это актуально для WP 5.8). Если вы превысите этот лимит, пользователь не будет создан, и вы не увидите никаких ошибок.

### Создание пользователя без электронной почты

Пользователь может быть создан даже без адреса электронной почты. Если вы не укажете параметр user_email, пользователь будет создан с пустым адресом электронной почты.

### Фильтры с префиксом pre_

Есть ряд фильтров, которые срабатывают перед использованием отфильтрованного значения. Все они передают значение параметров. Вот список таких фильтров:

- pre_user_login
- pre_user_nicename
- pre_user_url
- pre_user_email
- pre_user_display_name
- pre_user_nickname
- pre_user_first_name
- pre_user_last_name
- pre_user_description

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

Функция возвращает id созданного пользователя или объект WP_Error, если пользователь не может быть создан:

- Неверный ID пользователя.
- Нельзя создать пользователя с пустым именем.
- Имя пользователя не может быть длиннее 60 символов.
- Извините, имя пользователя уже существует!
- Извините, это имя пользователя не разрешено.
- Ник не может быть длиннее 50 символов.
- Извините, этот адрес электронной почты уже используется!

### Шаблон использования

```php
$userdata = [
    'user_login'           => '',      // (string) Имя пользователя для входа.
    'user_nicename'        => '',      // (string) URL-дружелюбное имя пользователя.
    'user_url'             => '',      // (string) URL пользователя.
    'user_email'           => '',      // (string) Электронная почта пользователя.
    'display_name'         => '',      // (string) Отображаемое имя пользователя. По умолчанию - имя пользователя.
    'nickname'             => '',      // (string) Псевдоним пользователя. По умолчанию - имя пользователя.
    'first_name'           => '',      // (string) Имя пользователя.
    'last_name'            => '',      // (string) Фамилия пользователя.
    'description'          => '',      // (string) Биографическое описание пользователя.
    'rich_editing'         => 'true',  // (string) Включить ли режим визуального редактора для пользователя.
    'syntax_highlighting'  => 'true',  // (string) Включить ли подсветку синтаксиса для редактора кода.
    'comment_shortcuts'    => 'false', // (string) Включить ли клавиатурные сокращения для модерации комментариев.
    'admin_color'          => 'fresh',  // (string) Цветовая схема панели администратора. По умолчанию - 'fresh'.
    'use_ssl'              => 'false', // (string) Должен ли пользователь всегда получать доступ к админке через https.
    'user_registered'      => '',      // (string) Дата регистрации пользователя. Формат - 'Y-m-d H:i:s'.
    'show_admin_bar_front' => 'true',  // (string) Показывать ли панель админа на фронте сайта.
    'role'                 => '',      // (string) Роль пользователя.
    'locale'               => '',      // (string) Локаль пользователя.
    'meta_input'           => [],      // (array) [ 'meta_key' => 'meta_value' ]
];

wp_insert_user( $userdata );

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

Создание пользователя на основе данных из запроса $_POST:

/**
 * Регистрация нового пользователя
 */
function new_user_registration() {
    // Проверим поля безопасности
    if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'vb_new_user' ) ) {
        die( 'Попробуйте снова немного позже.' );
    }

    // Данные из $_POST
    $userdata = [
        'user_login' => $_POST['user'],
        'user_pass'  => $_POST['pass'],
        'user_email' => $_POST['mail'],
        'first_name' => $_POST['name'],
        'nickname'   => $_POST['nick'],
    ];

    // WP сам будет производить проверку и очистку данных.
    $user_id = wp_insert_user( $userdata );

    if ( ! is_wp_error( $user_id ) ) {
        return true;
    } else {
        return $user_id->get_error_message();
    }
}

Заметки

  • Глобальный: wpdb. Объект абстракции базы данных WordPress.

Изменения

  • С 2.0.0 — введено.
  • С 3.6.0 — поля aim, jabber и yim были удалены из метода контакта пользователя для новых установок.
  • С 4.7.0 — поле локали можно передавать через $userdata.
  • С 5.3.0 — поле user_activation_key можно передавать через $userdata.
  • С 5.3.0 — поле spam можно передавать через $userdata (только для мультисайтов).
  • С 5.9.0 — поле meta_input можно передавать через $userdata для добавления пользовательских метаданных.

Leave a Reply

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