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

get_user_meta() WP 3.0

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

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

Работает на основе: get_metadata()
✈ 1 раз = 0.000998с = медленно | 50000 раз = 0.09с = скорость света PHP 7.1.2, WP 4.7.5

Хуков нет.

Возвращает
  • Значение мета поля, если параметр $single = true.
  • Массив, если $key не был указан или $single = false.
  • Если мета поля не существует и $single = true, функция вернет пустую строку. Если $single = false будет возвращен пустой массив.

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

get_user_meta( $user_id, $key, $single );
$user_id(число) (обязательный)
ID пользователя, данные которого нужно получить.
$key(строка)
Ключ мета поля, данные которого нужно получить. Если оставить этот параметр пустым, то будут возвращены все мета поля пользователя.
По умолчанию: ''
$single(логический)
Если установить в true, то функция вернет значение мета поля, если оставить false, то значение мета поля будет возращено в массиве. Этот параметр не имеет смысла, если параметр $key не был указан.
По умолчанию: false

Примеры

#1 Пример использования

Этот пример получит и затем выведет на экран Ник пользователя с ID = 9:

$user_id = 9;
$key = 'nickname';
$single = true;
$user_last = get_user_meta( $user_id, $key, true ); 
echo 'Значение ключа '. $key . ' у пользователя ' . $user_id . ' равно: ' . $user_last; 

// получим:
// Значение ключа nickname у пользователя 9 равно: Enot

#2 Получение всех метаданных

Этот пример показывает что будет если $key оставить пустым, чтобы получить все метаданных указанного пользователя:

$all_meta_for_user = get_user_meta( 9 );

/* 
$all_meta_for_user будет содержать массив:
Array ( 
	[first_name] => Array ( [0] => Tom ) 
	[last_name] => Array ( [0] => Auger) 
	[nickname] => Array ( [0] => tomauger ) 
	[description] => и т.д... 
)
*/

Чтобы получить данные из этого примера, вам нужно получать первый элемент массива, так:

$last_name = $all_meta_for_user['last_name'][0];

Чтобы избежать этого неудобства, возможно лучше применить свою функцию к получаемому массиву, используя array_map():

$all_meta_for_user = array_map( function( $a ){ return $a[0]; }, get_user_meta( $user_id ) );

/*
Теперь, $all_meta_for_user будет содержать такой массив:

Array ( 
	[first_name] => Tom 
	[last_name] => Auger 
	[nickname] => tomauger 
	[description] => и т.д...
)
*/

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

<?php
function get_user_meta($user_id, $key = '', $single = false) {
	return get_metadata('user', $user_id, $key, $single);
}

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

Из метки: metadata (метаданные)

Еще из раздела: Метаданные (usermeta)

get_user_meta 8 комментариев
  • campusboy1948 cайт: www.youtube.com/c/wpplus

    Не пойму, почему так, запутался в основах PHP. Вставляю в function.php

    $score = (int)get_user_meta( 1, 'rebus-score', true );

    А в header.php

    echo $score;

    Выдается ошибка, что переменная не определена. Если оба куска кода вставить в header.php, то работает. Работает также, если сделать как в первом случае, только в шапку добавить global $score.

    Вопрос, как использовать переменную в шаблоне, чтобы не приходилось писать везде global?

    Ответить2.2 года назад #
    • Kama4659

      header.php вызывается через фукнцию get_header() и область видимость функции - это она сама, если в ней не указать что переменная глобальная.

      Т.е. никак.

      Глобальные переменные можно получать одной строкой так: $GLOBALS['score'].

      А лучше в твоем случае написать функцию, которая будет возвращать score каждого пользователя.

      Или вообще, всегда использовать

      (int) get_user_meta( 1, 'rebus-score', true );

      get_user_meta() очень быстро работает...

      Ответить2.2 года назад #
      • campusboy1948 cайт: www.youtube.com/c/wpplus

        Спасибо за ответ! Блин, ну ведь ты ж чертовски прав smile и знал об этом, затупил. Если я сделаю в функцию типа так:

        function rebus(){
        	$score = (int)get_user_meta( 1, 'rebus-score', true );
        	return $score;
        }

        Затем в нужном месте:

        $score = rebus();
        echo $score;

        То если я 10 раз захочу вызвать функцию, то получится 10 запросов в БД, правильно? Или WP закеширует 1 запрос?

        Ответить2.2 года назад #
        • Kama4659

          Там кэш работает... Как по мне это поразительно быстрая функция, если бы не проверил не поверил бы что такая быстрая...

          Ответить2.2 года назад #
          • campusboy1948 cайт: www.youtube.com/c/wpplus

            Спасибо за инфу. Да, я тоже обратил на показатели. Но я спрашивал про кеш не спроста, ведь эта функция была для примера, а так то в шаблоне хочется использовать много переменных.

            Ответить2.2 года назад #
  • Леонид

    Никак не соображу - как мне выцепить в массив значения meta_key, соответствующие определенному шаблону?

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

    Если мета поля не существует и $sungle равен true - опечатка, должно быть $single

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

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