WordPress как на ладони
wordpress jino

get_user_by() WP 2.8

Получает пользователя по указанному полю и значению этого поля.

Используется в: username_exists(), get_userdata(), email_exists().
Работает на основе: WP_User()
✈ 1 раз = 0.001296с = очень медленно | 50000 раз = 3.27с = быстро

Хуков нет.

Возвращает

WP_User/false. Объект данных о пользователе, если указанное поле не существует, то вернет false.

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

$user = get_user_by( $field, $value );
$field(строка) (обязательный)

Поле, по которому нужно получить пользователя. Может быть:

  • id или ID с WP 4.4. - по полю ID
  • slug - по полю user_nicename
  • email - по полю user_email
  • login - по полю user_login

По умолчанию: нет

$value(строка/число) (обязательный)
Значение указанного поля.
По умолчанию: нет

Примеры

#1. Получим пользователя по email

Пример, родной функция WP, в которой используется get_user_by(). Функция получает пользователя по e-mail адресу, если пользователь существует, то будет возвращен его ID.

function email_exists( $email ) {
	if ( $user = get_user_by('email', $email) )
		return $user->ID;

	return false;
}

#2. Получим пользователя по id

$user = get_user_by('id', 1);

$user будет содержать:

WP_User Object
(
	[data] => stdClass Object
		(
			[ID] => 1
			[user_login] => kama
			[user_pass] => $P$Bu354452345AfDy0g3453245345345J/
			[user_nicename] => kama
			[user_email] => tggagga@mail.ru
			[user_url] => 
			[user_registered] => 2010-03-26 09:27:40
			[user_activation_key] => 
			[user_status] => 
			[display_name] => Kama
		)

	[ID] => 1
	[caps] => Array
		(
			[administrator] => 1
		)

	[cap_key] => wp_capabilities
	[roles] => Array
		(
			[0] => administrator
		)

	[allcaps] => Array
		(
			[switch_themes] => 1
			[edit_themes] => 1
			[activate_plugins] => 1
			[edit_plugins] => 1
			[edit_users] => 1
			[edit_files] => 1
			[manage_options] => 1
			[moderate_comments] => 1
			[manage_categories] => 1
			[manage_links] => 1
			[upload_files] => 1
			[import] => 1
			[unfiltered_html] => 1
			[edit_posts] => 1
			[edit_others_posts] => 1
			[edit_published_posts] => 1
			[publish_posts] => 1
			[edit_pages] => 1
			[read] => 1
			[level_10] => 1
			[level_9] => 1
			[level_8] => 1
			[level_7] => 1
			[level_6] => 1
			[level_5] => 1
			[level_4] => 1
			[level_3] => 1
			[level_2] => 1
			[level_1] => 1
			[level_0] => 1
			[edit_others_pages] => 1
			[edit_published_pages] => 1
			[publish_pages] => 1
			[delete_pages] => 1
			[delete_others_pages] => 1
			[delete_published_pages] => 1
			[delete_posts] => 1
			[delete_others_posts] => 1
			[delete_published_posts] => 1
			[delete_private_posts] => 1
			[edit_private_posts] => 1
			[read_private_posts] => 1
			[delete_private_pages] => 1
			[edit_private_pages] => 1
			[read_private_pages] => 1
			[delete_users] => 1
			[create_users] => 1
			[unfiltered_upload] => 1
			[edit_dashboard] => 1
			[update_plugins] => 1
			[delete_plugins] => 1
			[install_plugins] => 1
			[update_themes] => 1
			[install_themes] => 1
			[manage_downloads] => 1
			[manage_database] => 1
			[democracy_admin] => 1
			[update_core] => 1
			[list_users] => 1
			[remove_users] => 1
			[add_users] => 1
			[promote_users] => 1
			[edit_theme_options] => 1
			[delete_themes] => 1
			[export] => 1
			[administrator] => 1
		)

	[filter] => 
)

Код get user by: wp-includes/pluggable.php WP 4.9

<?php
function get_user_by( $field, $value ) {
	$userdata = WP_User::get_data_by( $field, $value );

	if ( !$userdata )
		return false;

	$user = new WP_User;
	$user->init( $userdata );

	return $user;
}

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

Из метки: _user

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

get_user_by 8 комментариев
  • Игнат

    Обнаружил что внутри плагина функция не определена sad

    Fatal error: Call to undefined function get_user_by()

    В последствии обнаружил что еще целая пачка связных функций выдают тот же результат при использовании в плагине sad
    В общем ну никак не определится моему плагину кто его юзает АДМИН или АВТОР smile что не пытался применить - все undefined sad
    При этом в теме использую эти же функции все ОК. Видимо плагин как то подгружается раньше файла инициализации функции???

    Были проверены так жеж функции:
    user_can()
    is_super_admin()
    Они тоже были undefined

    Ответить3.6 года назад #
    • Kama4558

      Как плагин подключается. Код просто исполняется в файле плагина или через хук? Вообще функции ВП подгружаются раньше плагинов, по идее должно все работать...

      Ответить3.6 года назад #
      • Игнат

        Специально пробовал такой вариант:

        <?php
        /*
        Plugin Name: .............
        Plugin URI: ........
        Description: ........
        Version: 1.0
        */
        
        global $user_ID;    
        if( is_super_admin( $user_ID ) ){....

        В результате получаю:

        Fatal error: Call to undefined function wp_get_current_user() in Z:\home\artilkom\www\wp-includes\capabilities.php on line 1511
        1
        Ответить3.6 года назад #
        • Kama4558

          Глянул я как там дела обстоят. Вот чего понял: wp_get_current_user() находится в /wp-includes/pluggable.php. Этот файл подключается сразу после загрузки всех плагинов. Сделано это для того, чтобы плагины могли переопределять эту функцию и так заменять её своей.

          Чтобы все работало, нужно использовать проверку после загрузки всех плагинов. Иначе говоря, функцию проверок нужно цеплять на хук plugins_loaded или более поздние хуки: setup_theme, after_setup_theme, init, wp_loaded и другие.

          Обычно плагин производит какие-либо действия, вот эти самые действия вам нужно прицепить на хуки. Например, так:

          <?php
          /*
          Plugin Name: .............
          Plugin URI: ........
          Description: ........
          Version: 1.0
          */
          
          function foo_function(){
          	global $user_ID;
          
          	if( is_super_admin( $user_ID ) )
          		die( '111111' );
          	else
          		die( '22222222' );
          }
          add_action( 'plugins_loaded', 'foo_function' );
          1
          Ответить3.6 года назад #
          • Игнат

            Да я понимал логику движения smile я же сразу с первого вопроса предположил, что плагин инициализируется раньше функции (вполне логичное предположение smile глядя на текст получаемой ошибки).

            Вопрос был в иерархии, что после чего загружается..
            Вот Ваш ответ ОЧЕНЬ помог сейчас зацепил все на init
            ЗАРАБОТАЛО ПРЕКРАСНО!

            Огромное Вам спасибо, читаю Ваш блог уже пару лет .. если не больше smile
            а надобность спрашивать возникла только сейчас smile
            Наверное это свидетельствует о том, что в блоге достаточно информации, чтобы обойтись без дополнительных вопросов smile но как видите .. бывают случаи smile
            Еще раз спасибо.

            1
            Ответить3.6 года назад #
  • Andrey61742

    Доброго времени!
    Можно подробнее про подключение хука? Проблема в том, что пишу класс для плагина (работает в админ-панели), в котором хочу получить данные по пользователю из метода. Если упростить, то будет примерно так:

    <?php
    // classes/MyUser.php
    class MyUser {
    
    	public function findById($id){
    		$myuser = get_user_by('id', $id);
    		return $myuser;
    	}
    
    }
    ?>

    Данный метод вызывается другой функцией только при передачи определенных параметров через $_GET.
    Подскажите, пожалуйста, где и какой мне нужно поставить хук, чтобы функция get_user_by() сработала?

    Спасибо.

    • Kama4558

      Не понятно при чем тут хук и что нужно...
      Для получения юзера по ID есть другая функция get_userdata()

      • Andrey61742

        Виноват, опишу подробнее. Пишу плагин. У плагина есть страница, которая открывается через пункт в панели управления слева. Если в URL есть параметр user_id, то создается экземпляр класса и выполняется метод findById($id). Но почему-то не получается выполнить ни get_user_by(), ни get_userdata(). Как понял из ответов по теме выше, функции не выполняются потому, что они на момент выполнения метода еще не определены. Вы писали, что "Чтобы все работало, нужно использовать проверку после загрузки всех плагинов. ". Вот я никак и не пойму где эту самую проверку сделать, чтобы в случае поступления параметров выполнялся метод только тогда, когда функции WP определятся.

Здравствуйте, !

Ваш комментарий