Вопрос или проблема
Можно ли установить отображаемое имя из введенной строки в поле регистрации ника? Я пытаюсь сделать это с помощью простого хука, но в итоге ничего не работает.
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' );
Объяснение процесса
-
Получение данных: При регистрации нового пользователя мы можем получить его метаданные, использовав
get_userdata($user_id)
. Это позволит получить все данные, включая псевдоним. -
Обновление имени: С помощью
wp_update_user
илиupdate_user_meta
можно обновить полеdisplay_name
, установив его равным значению псевдонима. -
Хук
user_register
: Этот хук вызывается сразу после регистрации, что позволяет нам модифицировать данные пользователя перед их дальнейшим использованием.
Заключение
С помощью вышеописанных методов вы сможете установить отображаемое имя из псевдонима при регистрации пользователя. Выбор подхода зависит от ваших предпочтений; оба решения выполняют задачу корректно. Убедитесь, что вы проверили свой код и сразу после регистрации пользователя, чтобы изменения были применены.