# Функция get_user_meta() ─ WP 3.0.0
Функция get_user_meta() позволяет получать одно или все метаполя для указанного пользователя.
Если ключ не существует, функция вернёт пустую строку или пустой массив в зависимости от значения параметра $single.
Это может привести к неожиданным проблемам в вашем коде, если пользовательские метаданные пустые. Ваш код может неожиданно использовать add_user_meta, вместо update_user_meta, дума��, что метаданные у пользователя ещё не созданы.
**Важно:** Когда вы вызываете get_user_meta( $user_id ); без указания ключа, значения не будут автоматически десериализованы. Вам нужно будет использовать функцию maybe_unserialize() для этого.
Метаполя пользователя аналогичны пользовательским полям для постов, только в данном случае "постом" является пользователь, а "пользовательским полем" — метаполе пользователя. Метаполя хранятся в таблице wp_usermeta, что аналогично таблице wp_postmeta для постов.
## Использование
Функция имеет следующий синтаксис:
```php
get_user_meta( $user_id, $key, $single );
$user_id(int) (обязательный) — ID пользователя.$key(string) — ключ метаданных, который нужно получить. По умолчанию возвращает данные для всех ключей.- По умолчанию: ''
$single(true|false) — определяет, возвращать ли одно значение. Этот параметр не влияет, если$keyне указан.- По умолчанию: false
Возвращаемые значения
-
Возвращает
false, если параметр$user_idпередан неправильно. -
Если
$single = true:- Возвращает строку/массив, если метаполе существует.
- Возвращает '' (пустую строку), если метаполе не существует.
-
Если
$single = false:- Возвращает массив всех значений метаполей, если метаполе существует.
- Возвращает
array(), если метаполе не существует.
При хранении числа оно будет возвращено как строка, например, '54'.
Примеры
Пример 1: Получение всех метаданных
Этот пример показывает, что произойдёт, если $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] => и т.д.
)
*/
Пример 2: Пример использования
Этот пример показывает, как получить и отобразить никнейм пользователя с ID = 9:
$user_id = 9;
$key = 'nickname';
$meta_val = get_user_meta( $user_id, $key, true );
echo sprintf( 'Значение ключа %s пользователя %d: %s', $key, $user_id, $meta_val );
// вывод:
// Значение ключа nickname пользователя 9: Enot
Пример 3: Проверка на существование метаполя
Код для проверки существования метаполя может выглядеть так:
// для одного значения
$value = get_post_meta( 76, 'key_1', true );
if( '' !== $value ){
// метаполе существует
}
// для нескольких значений
$value = get_post_meta( 76, 'key_1' );
if( [] !== $value ){
// метаполе существует
}
Изменения
Функция была введена в версии 3.0.0.
Код get_user_meta()
function get_user_meta( $user_id, $key = '', $single = false ) {
return get_metadata( 'user', $user_id, $key, $single );
}
Связанные функции
add_comment_meta()add_metadata()add_post_meta()add_term_meta()add_user_meta()delete_comment_meta()delete_metadata()delete_post_meta()delete_user_meta()get_comment_meta()get_metadata()get_post_meta()update_comment_meta()update_metadata()update_post_meta()update_user_meta()