WP_SET_CURRENT_USER(): Как изменить текущего пользователя в WordPress 2.0.3

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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *