update_user_meta()WP 3.0.0

Обновляет мета поле указанного пользователя.

Кроме обновления существующего поля, также создаст поле, если поля с таким ключом еще не существует.

Функцию можно использовать вместо add_user_meta(). При создании поля вызывает add_user_meta() с параметром $unique = true. Это означает, что add_user_meta() удобно использовать только в случаях, когда нужно создать несколько полей с одинаковыми ключами, во остальных случаях удобнее использовать эту функцию.

Используйте параметр $prev_value, когда нужно определить какое именно поле, из нескольких с одинаковыми ключами, нужно обновить.

Функция не удаляет поле, если передано пустое значение параметра $meta_value.

Работает на основе: update_metadata()
Основа для: update_user_option()
1 раз — 0.000987 сек (медленно) | 50000 раз — 45.34 сек (очень медленно) | PHP 7.0.8, WP 4.6.1

Хуков нет.

Возвращает

int|true|false.

  • true - при успешном обновлении.
  • false - при неудаче или когда для обновления было передано значение которое уже есть в бд.
  • ID первичного поля таблицы метаполей (umeta_id), когда было создано новое поле.

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

update_user_meta( $user_id, $meta_key, $meta_value, $prev_value )
$user_id(число) (обязательный)
ID пользователя.
$meta_key(строка) (обязательный)
Ключ поля - поле meta_key в таблице wp_usermeta, для которого значение meta_value должно быть обновлено.
$meta_value(строка/массив/число/объект/логический) (обязательный)

Новое значение поля. Значение должно отличаться от предыдущего. Объекты и массивы будут автоматически сериализованы (serialized).

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

$prev_value(строка/массив/число/объект/логический)
Старое значение. Нужно указывать когда у пользователя может быть несколько полей с одинаковыми ключами и нам нужно обновить определенное из них.
По умолчанию: ''

Примеры

0

#1 Базовый пример

Предположим у пользователя с ID 1 должно быть мета поле mood. Давайте обновим его значение или создадим поле, если его не существует.

update_user_meta( 1, 'mood', 'good' )
0

#2 Обновим сайт пользователя

В мета полях пользователя хранятся привычные нам данные: Ник, Имя, Фамилия, Сайт и т.д. Пример ниже показывает, как обновить сайт пользователя с ID 1:

$user_id = 1;
$website = 'http://wordpress.org';
update_user_meta($user_id, 'user_url', $website);
0

#3 Проверка на ошибку

Этот пример показывает как проверить обновилось ли поле:

$user_id = 1;
$new_value = 'good';

// Вернет false, если предыдущее значение совпадает с $new_value.
if( ! update_user_meta( $user_id, 'some_meta_key', $new_value ) ){
	echo "Поле не обновлено";
}

// Получим значение поля и проверим его с новым значением $new_value
if ( get_user_meta($user_id,  'some_meta_key', true ) != $new_value )
	wp_die('Ошибка: новое значение не записалось.');
0

#4 Заметка об обновлении ВСЕХ метаполей юзера с одинаковым ключом

update_user_meta() обновит ВСЕ метаполя пользователей с одинаковым ключом, ЕСЛИ не указать конкретную запись в таблице, которую нужно обновить.

Вот способ сделать это, когда есть метаполя юзера, которые могут выглядеть так:

+---------+----------------------+-----------------
| user_id | meta_key             | meta_value 
+---------+----------------------+-----------------
| 862     | favorite_coffee      | {"coffee_id":10,"title":"Vietnamese Iced Coffee","type":"drip"}
| 862     | favorite_coffee      | {"coffee_id":11,"title":"Mocha","type":"espresso"}
| 862     | favorite_coffee      | {"coffee_id":12,"title":"Just An Okay Cappuchino","type":"espresso"}
// фиктивные данные для лучшего отображения проблемы, 
// мы хотим изменить заголовок `coffee_id` 12
$parameters = [
	'coffee_id' => '12',
	'title'     => 'A Delicious Cappuchino',
	'type'      => 'espresso',
];

// попробуем найти метаполя ``favorite_coffee`` 
$previous_favorite_coffee = get_user_meta( $user_id, 'favorite_coffee', false );

/**
 * Во-первых, условие, когда метаданные пользователя favorite_coffee отсутствуют
 */ 
if ( ! $previous_favorite_coffee ) {
	add_user_meta( $user_id, 'favorite_coffee', $parameters );
}

/**
 * Во-вторых, условие, когда пользователя favorite_coffee уже существуют
 */
// рекурсивный поиск по записям, возвращаемым get_user_meta, 
// для записи, которую вы хотите заменить, как определено по `coffee_id`.
// См: http://php.net/manual/en/function.array-search.php#116635
$coffee_id = array_search( 
	$parameters['coffee_id'], 
	array_column( $previous_favorite_coffee, 'coffee_id' ) 
);

// добавляем, если не существует пара:
// wp_usermeta meta_key[favorite_coffee] => meta_value[ $parameters[ $coffee_id ] ] 
if ( false === $coffee_id ) {
	add_user_meta( $user_id, 'favorite_coffee', $parameters );
}
// обновляем, если уже существует пара:
// wp_usermeta meta_key[favorite_coffee] => meta_value[ $parameters[ $coffee_id ] ] 
else {
	update_user_meta( $user_id, 'favorite_coffee', $parameters, $previous_favorite_coffee[ $coffee_id ] );
}

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

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

Код update_user_meta() WP 6.9.1

function update_user_meta( $user_id, $meta_key, $meta_value, $prev_value = '' ) {
	return update_metadata( 'user', $user_id, $meta_key, $meta_value, $prev_value );
}
6 комментариев