wp_set_current_user()WP 2.0.3

Устанавливает/Изменяет текущего пользователя по ID или имени. Функция не авторизует пользователя а меняет глобальную переменную $current_user и связанные с ней переменные.

Укажите $id = null когда ID пользователя неизвестен, но известно его имя (name).

Для некоторых действий в WordPress нужна авторизация. С помощью этой функции можно дать возможность совершать такие действия неавторизованным пользователям или другим ролям.

Устанавливает глобальные переменные:

$user_ID    = (int) $user->ID;
$user_level = (int) $user->user_level;
$userdata   = $user;
$user_login = $user->user_login;
$user_email = $user->user_email;
$user_url   = $user->user_url;
$user_identity = $user->display_name;

См. setup_userdata()

Pluggable функция — эту функцию можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.

Замена функции (переопределение) — в must-use или обычном плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.

Работает на основе: setup_userdata()
Основа для: wp_get_current_user()
Хуки из функции

Возвращает

WP_User. Объект WP_User — данные пользователя.

Использование

wp_set_current_user( $id, $name );
$id(число) (обязательный)
ID пользователя. Можно указать null, если ID пользователя неизвестен.
$name(строка)
Имя пользователя username (login).
По умолчанию: ''

Примеры

0

#1 Установим текущего пользователя и авторизуем его

Этот пример установит текущего пользователя и авторизует его:

$user_id = 12345;
$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 );
}
0

#2 Пере-инициализация текущего пользователя

Внимание! Запуск этой функции повлияет на все, что связано с текущим пользователем (реальным пользователем).

Допустим, нам нужно сделать что-то для специального пользователя в процессе выполнения PHP кода, но код, который мы запускаем, зависит от переменной $current_user, и у нас нет возможности изменить этот код. Чтобы решить эту проблему, мы можем переключиться на этого специального пользователя, а затем вернуть исходного пользователя.

// сохраняем ID текущего реального пользователя
$original_user_id = get_current_user_id();

// переключаемся на пользователя 15
wp_set_current_user( 15 );

// Запускаем наш код...

// Восстанавливаем пользователя
wp_set_current_user( $original_user_id );
0

#3 Переустановка текущего пользователя

Допустим мы обновляем данные в профиле пользователя и после обновления данных, нам нужно переустановить уже установленную глобальную переменную $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 ); // переустанавливаем

Заметки

  • Global. WP_User. $current_user The current user object which holds the user data.

Список изменений

С версии 2.0.3 Введена.

Код wp_set_current_user() WP 6.4.3

function wp_set_current_user( $id, $name = '' ) {
	global $current_user;

	// If `$id` matches the current user, there is nothing to do.
	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 );

	/**
	 * Fires after the current user is set.
	 *
	 * @since 2.0.1
	 */
	do_action( 'set_current_user' );

	return $current_user;
}