WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_get_current_user() WP 2.0.4

Получает данные о текущем авторизованном пользователе (объект WP_User).

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

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

Является основой для: wp_create_nonce(), get_current_user_id(), is_user_logged_in()
Работает на основе: _wp_get_current_user(), wp_set_current_user()
✈ 1 раз = 0.00001с = скорость света | 50000 раз = 0.03с = скорость света

Хуков нет.

Возвращает

WP_User. Объект WP_User.

Если пользователь не авторизован, вернет пустой объект! Т.е. Нельзя проверять авторизован ли пользователь через эту функцию:

if( wp_get_current_user() ){
	echo 'эта строка будет выводиться всегда!';
}

// Нужно так:
if( wp_get_current_user()->exists() ){
	echo 'Авторизован!';
}

// или так: 
if( is_user_logged_in() ){
	echo 'Авторизован!';
}

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

wp_get_current_user();

Примеры

#1. Проверим вошел ли пользователь на сайт

Проверим авторизован (залогинен) ли пользователь. Если пользователя не существует, его ID будет равен 0:

$current_user = wp_get_current_user();
if( $current_user->ID ){
	// Авторизован.
}
else {
	// Не авторизован.
}

Но лучше использовать для этих целей is_user_logged_in().

#2. Получим данные текущего пользователя

Выведем на экран различные данные о текущем авторизованном пользователе:

$current_user = wp_get_current_user();

echo 'Username: '         . $current_user->user_login     . '<br />';
echo 'email: '            . $current_user->user_email     . '<br />';
echo 'first name: '       . $current_user->user_firstname . '<br />';
echo 'last name: '        . $current_user->user_lastname  . '<br />';
echo 'Отображаемое имя: '   . $current_user->display_name   . '<br />';
echo 'ID: '               . $current_user->ID             . '<br />';

Заметки

  • Смотрите: _wp_get_current_user()
  • Global. WP_User. $current_user Checks if the current user is set.

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

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

Код wp get current user: wp-includes/pluggable.php WP 5.3

<?php
function wp_get_current_user() {
	return _wp_get_current_user();
}

Cвязанные функции

Из метки: Пользователи (_user)

Еще из раздела: Остальное

16 комментов
Полезные 3 Все
  • @ Сергей

    Вот эта функция вызывает дисплей нейм админа

    <?php 
    $user_info = get_userdata(1);
    echo '' . $user_info->display_name . "\n";
    ?>

    А какая функция вызывает дисплей нейм зареганого пользователя в его профиль? Просто у меня профиль на вронтедне и по этому пытаюсь тут немного видоизменять некоторые вещи. Заранее спасибо.

    Ответить26.Июн.2014 в 20:25 #
    • Kama7641

      Что-то я не понял, чем вам пример из этой функции не подходит?

      <?php
      	$current_user = wp_get_current_user();
      
      	echo 'Отображаемое имя: ' . $current_user->display_name . '<br />';
      ?>
      Ответить27.Июн.2014 в 02:59 #
  • xaseros

    Получает массив с информацией

    Во-первых не получает а возвращает, во вторых не массив а объект.

    В WP и так API расхлябанное, хоть вы не вносите лишний хаос.

    Ответить11.Май.2015 в 16:11 #
    • Kama7641

      Вы чуть ниже пункт:

      Возвращает

      Объект WP_User.

      видели?

      Функция получает данные пользователя. А то что конкретно она возвращает это уже чисто технический вопрос...

      Правильно писать вообще так: Получает данные текущего пользователя и возвращает их в виде объекта WP_User. Ну я написал как написал, строгий шаблон для сео плох и вообще утомляет...

      "Получает массив с информацией" - это тоже самое что получает массив данных в виде объекта. Но, "Возвращает массив" - это уже другое... Если вы понимаете о чем я?

      В общем, поправил "массив информации" на "данные" чтобы не путать никого... Спасибо за коммент thank_you

      2
      Ответить11.Май.2015 в 17:05 #
      • Антон

        Какой еще хаос. Этот блог - настоящее сокровище. Автор, не слушай нытиков.

        7
        Ответить17.Мар.2017 в 09:38 #
  • @ campusboy3433 www.youtube.com/c/wpplus

    Странная тема. На одном сайте использую код:

    function is_user_role( $role, $user_id = null ) {
    	$user = ( $user_id ) ? get_userdata( $user_id ) : wp_get_current_user();
    	if( ! $user )       return false;
    	return in_array( $role, (array) $user->roles );
    }

    Всё работает. На другом выдает

    Fatal error: Call to undefined function wp_get_current_user() in C:\OpenServer\domains......

    В чём прикол, пока не понял. Использую в плагине. Пример брал отсюда.

    Ответить25.Июл.2016 в 19:30 #
    • Kama7641

      wp_get_current_user() находится в /wp-includes/pluggable.php, а значит она подключается после подключения всех плагинов... Т.е. если напрямую в коде плагина вызвать функцию is_user_role(), то получим такую вот ошибку... Её нужно вызывать во время хука plugins_loaded или позднее: init, wp, wp_loaded и т.д.

      П.С. Описал хук plugins_loaded, там в примере про это как раз smile

      1
      Ответить25.Июл.2016 в 22:05 #
      • @ campusboy3433 www.youtube.com/c/wpplus

        Это я понял, спасибо smile Меня лишь удивляет, что на другом сайте всё ж нормально, вот в чём прикол!

        Ответить25.Июл.2016 в 22:06 #
        • Kama7641

          Истина где-то рядом... Может на другом сайте есть плагин который эту функцию переопределяет и который подключается до твоего плагина? Или может все-таки на том другом сайте, она вызывается после plugins_loaded? Ну не может функция работать, пока она не определена, ты и сам это прекрасно знаешь smile

          1
          Ответить26.Июл.2016 в 01:37 #
          • @ campusboy3433 www.youtube.com/c/wpplus

            Согласен. Тот сайт, где это работает делал лично я. Там минимум плагинов, чисто must have и мой плагин личного кабинета. А на том, что мне дали - 40 плагинов стоит laugh Может какой из них малину портит. В общем, не важно. Спасибо за совет насчёт plugins_loaded. Не охота время тратить на копание, решил проблему так. По идее так и надо было мне изначально делать.

            1
            Ответить26.Июл.2016 в 01:53 #
  • Андрей

    Получаю объект текущего юзера вот так $user = wp_get_current_user();

    Вывожу в файл, смотрю что за свойства у него есть. У него есть свойства data, ID, caps, roles и прочие, но ничего похожего на first_name и last_name.

    Как получается, что у объекта нет свойства first_name и last_name, но при этом при вызове $user->first_name имя пользователя возвращается?

    Ответить14.Фев.2019 в 15:34 #
    • Kama7641

      wp_get_current_user() возвращает объект WP_User, у которого есть магические методы. Они описывают что делать, когда обращаются к несуществующему свойству объекта. В данном случае, если запросить свойства которого нет в объекте он налету попробует получить значение метаполя...

      Ответить15.Фев.2019 в 15:44 #
  • Валерий

    Столкнулся с задачей, когда wp_get_current_user() возвращает значение ID = 0, но пользователь залогинен. В моем случае это хук wpcf7_validate_ . $tagname и для залогиненого пользователя валидация некоего поля должна отличаться.
    Помогла функция $current_user_id = wp_validate_logged_in_cookie( 0 );

    1
    Ответить27.Мар.2019 в 16:27 #
  • Сергей

    Можно проверить авторизацию через empty:

    if(empty(wp_get_current_user())){};
    -1
    Ответить19.Апр.2019 в 12:35 #
    • @ campusboy3433 www.youtube.com/c/wpplus

      В статье написано, что нельзя и это так. Зачем вводите людей в заблуждение?

      Код (вставляю в single.php, открываю страницу не авторизованным пользователем)

      if ( empty( wp_get_current_user() ) ) {
      	echo 'Это пустой объект';
      } else {
      	echo 'Это не пустой объект';
      
      	var_dump( wp_get_current_user() );
      }

      Результат:

      При тех же условиях:

      if ( wp_get_current_user()->exists() ) {
      	echo 'Авторизованный пользователь';
      } else {
      	echo 'Гость';
      }

      Выведет на экран "Гость". Тот же эффект будет и с is_user_logged_in(), которая в целом делает тоже самое по коду.

      1
      Ответить19.Апр.2019 в 13:01 #
Здравствуйте, !     Войти . Зарегистрироваться