Функция get_user_meta() в WordPress – как использовать и какие значения она возвращает

# Функция 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()

Leave a Reply

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