WP_SET_CURRENT_USER() │ WP 2.0.3
Функция WP_SET_CURRENT_USER() позволяет изменить текущего пользователя по его ID или имени. Эта функция не авторизует пользователя, а просто обновляет глобальную переменную $current_user и связанные с ней переменные.
Если вы не знаете ID пользователя, установите $id в null и укажите имя пользователя.
Некоторые действия в WordPress требуют авторизации. С помощью этой функции вы можете разрешить неавторизованным пользователям или другим ролям выполнять такие действия.
Устанавливаемые глобальные переменные
Функция обновляет следующие глобальные переменные:
$user_ID— ID пользователя (целое число)$user_level— уровень пользователя (целое число)$userdata— объект пользователя$user_login— имя пользователя (логин)$user_email— электронная почта пользователя$user_url— URL пользователя$user_identity— отображаемое имя пользователя
Смотрите setup_userdata()
Плагины и замена функции
Эта функция является заменяемой ([pluggable function]), что означает, что её можно переопределить в плагине. Однако она будет работать только после загрузки всех плагинов. Вы не можете вызывать эту функцию и другие функции, которые от неё зависят, непосредственно из кода плагина. Они должны вызываться на хуке plugins_loaded или позже, например, на хуке init.
Замена функции
В вашем плагине (обязательном или обычном) вы можете создать функцию с тем же именем, и она заменит оригинальную.
Использование функции
wp_set_current_user( $id, $name );
$id(int|null) — ID пользователя. Вы можете указатьnull, если ID неизвестен.$name(string) — имя пользователя (логин). По умолчанию:''.
Примеры
Пример 1: Переинициализация текущего пользователя
Внимание! Выполнение этой функции повлияет на всё, связанное с текущим пользователем (реальным пользователем)!
Предположим, нам нужно выполнить действие для определенного пользователя во время выполнения, но код, который мы запускаем, зависит от переменной $current_user, и у нас нет возможности изменить этот код. Чтобы решить эту проблему, мы можем переключиться на нужного пользователя, выполнить действия и затем вернуться к оригинальному пользователю.
// Сохраняем ID текущего реального пользователя
$original_user_id = get_current_user_id();
// Переключаемся на пользователя с ID 15
wp_set_current_user( 15 );
// Выполняем необходимые действия...
// Восстанавливаем оригинального пользователя
wp_set_current_user( $original_user_id );
Пример 2: Переинициализация текущего пользователя (случай 2)
Допустим, мы обновляем данные в профиле пользователя, и после этого нужно заново установить уже существующую глобальную переменную $current_user и все другие связанные переменные.
То есть, нам нужно снова вызвать функцию wp_get_current_user(), чтобы она вернула данные о текущем пользователе после обновления.
global $current_user;
$cuser_id = $current_user->ID; // Сохраняем ID
unset( $current_user ); // Удаляем, чтобы wp_set_current_user() всё переустановило
wp_set_current_user( $cuser_id ); // Переустанавливаем
Пример 3: Установка текущего пользователя и авторизация
Этот пример показывает, как установить текущего пользователя и авторизовать его:
$user_id = 123;
$user = get_user_by( 'id', $user_id );
if ( $user ) {
wp_set_current_user( $user_id, $user->user_login );
wp_set_auth_cookie( $user_id );
do_action( 'wp_login', $user->user_login );
}
Примечания
- Глобальная переменная:
$current_user— объект текущего пользователя, который содержит данные о пользователе.
Изменения
- С версии 2.0.3 — введена функция.
Код функции
wp-includes/pluggable.php
function wp_set_current_user( $id, $name = '' ) {
global $current_user;
// Если $id соответствует текущему пользователю, ничего не делаем.
if ( isset( $current_user )
&& ( $current_user instanceof WP_User )
&& ( $id === $current_user->ID )
&& ( null !== $id )
) {
return $current_user;
}
$current_user = new WP_User( $id, $name );
setup_userdata( $current_user->ID );
/**
* Выполняется после установки текущего пользователя.
*/
do_action( 'set_current_user' );
return $current_user;
}
Связанные функции
clean_user_cache()current_user_can()delete_user_option()get_current_user_id()get_edit_user_link()get_user_by()get_user_option()get_userdata()get_users()is_user_logged_in()wp_create_user()wp_destroy_other_sessions()wp_get_current_user()wp_insert_user()wp_list_users()wp_send_new_user_notifications()wp_update_user()WP_User()
Эти функции могут быть полезны при работе с пользователями в WordPress.