Как программно изменить имя пользователя (user_login)?


15

Как и в заголовке, как программно изменить логин пользователя?

Я хотел использовать wp_insert_userфункцию, но похоже, что при обновлении текущего пользователя, он не меняет их имя пользователя. Должен ли я использовать $wpdb->updateдля этого? Если да, как будет выглядеть код для изменения имени пользователя? Какие последствия будет иметь изменение входа пользователя, учитывая, что WordPress API не позволяет изменять имена пользователей?

Ответы:


21

Я был уверен, что wp_update_userфункция должна сделать это ( http://codex.wordpress.org/Function_Reference/wp_update_user ).

Он даже получает user_login в качестве параметра, но, похоже, игнорирует его, когда вы устанавливаете этот параметр.

Так что этот код выглядит нормально, но он не работает так, как вы хотели бы :(:

wp_update_user( array ( 'ID' => $user_id, 'user_login' => $new_login ) ) ;

Вы должны вызвать пользовательский SQL-запрос для обновления user_login:

$wpdb->update($wpdb->users, array('user_login' => $new_user_login), array('ID' => $user_id));

Это работает хорошо, и я не думаю, что это имеет какие-либо серьезные последствия, потому что WP использует идентификатор пользователя для назначения сообщений / комментариев (и так далее) пользователю.

Единственная проблема, о которой я могу думать, это то, что, когда этот пользователь в данный момент вошел в систему, он выйдет из системы после изменения user_login.


1
Не совсем, проверьте примечания для этой функции (а также код): обратите внимание, что мы не можем изменять имена пользователей с помощью этой функции, фактически имена пользователей не могут быть изменены с панели администратора, так как WordPress не позволяет именам пользователей быть обновленным.
Матеуш Хайдзионы

Спасибо, это прекрасно работает! Не стоит беспокоиться о пользователях, вошедших в систему, так как я разрешаю изменение имени пользователя только для пользователей, вышедших из системы (активация учетной записи по электронной почте).
Матеуш Хайдзионы

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

1
мне нужно было добавить глобальный $ wpdb; чтобы заставить его работать
Мау

4
Старый пост, но я собираюсь сделать это сам, стоило бы проверить, нет ли другого пользователя с тем же user_login, зарегистрированным на вашем сайте, поскольку форма входа в систему, очевидно, использует это значение для поиска учетных записей и сопоставления хэшей паролей
haxxxton

4

Вы могли бы также рассмотреть изменение user_nicename через запрос SQL. Как только это будет сделано, все постоянные ссылки и другие функции будут работать идеально.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.