Установить отображаемое имя из ника в процессе регистрации.

Вопрос или проблема

Можно ли установить отображаемое имя из введенной строки в поле регистрации ника? Я пытаюсь сделать это с помощью простого хука, но в итоге ничего не работает.

function set_default_display_name( $user_id ) {
  $user = get_userdata( $user_id );
  $name = $user->nickname;
  $args = array(
    'ID' => $user_id,
    'display_name' => $name
  );
  wp_update_user( $args );
}
add_action( 'user_register', 'set_default_display_name' );

По умолчанию, сразу после регистрации, отображаемое имя устанавливается из имени пользователя WP (логина), а не ника. Может кто-нибудь помочь мне установить отображаемое имя из ника?

Не используйте хуки, вместо этого просто используйте wp_update_user, когда форма заполнена и вы готовы создать пользователя:

wp_update_user( array ('ID' => $user_id,  'display_name' => $posted['nickname']) ) ;

Согласно WordPress codex:

Этот хук действия позволяет вам получить доступ к данным нового пользователя сразу после того, как он добавлен в базу данных. Идентификатор пользователя передается в хук в качестве аргумента.

Не все метаданные пользователя были сохранены в базе данных, когда это действие вызвано. Например, ник в базе данных, но имя и фамилия – нет (по состоянию на v3.9.1). Пароль уже был зашифрован, когда это действие было вызвано.

Вы можете использовать функцию update_user_meta, чтобы обновить любое поле метаданных пользователя. Поскольку display_name еще не обновлено, вы можете собрать данные пользователя (как и делали ранее) и решить, какую информацию хотите включить в значение display_name. Затем вы можете использовать:

update_user_meta( $user_id, 'display_name', $name );

Ответ или решение

Чтобы установить отображаемое имя (display name) из поля для ввода псевдонима (nickname) при регистрации пользователя в WordPress, необходимо учитывать, что стандартный хук user_register вызывается в момент, когда некоторые метаданные пользователя ещё не сохранены в базе данных. В частности, поле nickname уже доступно, но другие метаданные, такие как first_name и last_name, ещё не обновлены.

Решение вашей проблемы заключается в использовании wp_update_user или update_user_meta для изменения поля display_name после регистрации. Давайте рассмотрим оба варианта.

Вариант 1: Использование wp_update_user

Этот подход предполагает, что вы вызываете wp_update_user сразу после создания пользователя, чтобы указать новое отображаемое имя:

function set_default_display_name( $user_id ) {
    // Получаем данные нового пользователя
    $user = get_userdata( $user_id );

    // Устанавливаем новое значение для поля display_name
    $args = array(
        'ID' => $user_id,
        'display_name' => $user->nickname // Берем значение из псевдонима
    );

    // Обновляем данные пользователя
    wp_update_user( $args );
}
add_action( 'user_register', 'set_default_display_name' );

Вариант 2: Использование update_user_meta

Если вы хотите обновить только определённое поле, можно воспользоваться функцией update_user_meta:

function set_display_name_meta( $user_id ) {
    // Получаем данные нового пользователя
    $user = get_userdata( $user_id );

    // Обновляем отображаемое имя на основе псевдонима
    update_user_meta( $user_id, 'display_name', $user->nickname );
}
add_action( 'user_register', 'set_display_name_meta' );

Объяснение процесса

  1. Получение данных: При регистрации нового пользователя мы можем получить его метаданные, использовав get_userdata($user_id). Это позволит получить все данные, включая псевдоним.

  2. Обновление имени: С помощью wp_update_user или update_user_meta можно обновить поле display_name, установив его равным значению псевдонима.

  3. Хук user_register: Этот хук вызывается сразу после регистрации, что позволяет нам модифицировать данные пользователя перед их дальнейшим использованием.

Заключение

С помощью вышеописанных методов вы сможете установить отображаемое имя из псевдонима при регистрации пользователя. Выбор подхода зависит от ваших предпочтений; оба решения выполняют задачу корректно. Убедитесь, что вы проверили свой код и сразу после регистрации пользователя, чтобы изменения были применены.

Оцените материал
Добавить комментарий

Капча загружается...