函数文档

update_usermeta()

💡 云策文档标注

概述

update_usermeta() 是一个已弃用的 WordPress 函数,用于更新用户的元数据。它已被 update_user_meta() 替代,开发者应避免使用此函数。

关键要点

  • 函数已弃用:自 WordPress 3.0.0 起,update_usermeta() 被标记为弃用,推荐使用 update_user_meta()。
  • 参数要求:接受三个必需参数:$user_id(整数)、$meta_key(字符串,仅允许下划线字符)、$meta_value(混合类型)。
  • 返回值:成功更新返回 true,失败返回 false。
  • 数据处理:自动处理序列化,如果 $meta_value 为空字符串,则删除该元数据。
  • 内部操作:涉及数据库查询、缓存清理和 Hook 触发(如 update_usermeta、added_usermeta)。

代码示例

function update_usermeta( $user_id, $meta_key, $meta_value ) {
    _deprecated_function( __FUNCTION__, '3.0.0', 'update_user_meta()' );
    global $wpdb;
    if ( !is_numeric( $user_id ) )
        return false;
    $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);

    /** @todo Might need fix because usermeta data is assumed to be already escaped */
    if ( is_string($meta_value) )
        $meta_value = stripslashes($meta_value);
    $meta_value = maybe_serialize($meta_value);

    if (empty($meta_value)) {
        return delete_usermeta($user_id, $meta_key);
    }

    $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );

    if ( $cur )
        do_action( 'update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );

    if ( !$cur )
        $wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') );
    elseif ( $cur->meta_value != $meta_value )
        $wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') );
    else
        return false;

    clean_user_cache( $user_id );
    wp_cache_delete( $user_id, 'user_meta' );

    if ( !$cur )
        do_action( 'added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value );
    else
        do_action( 'updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );

    return true;
}

注意事项

  • 弃用警告:使用此函数会触发 _deprecated_function(),建议迁移到 update_user_meta() 以避免未来兼容性问题。
  • 元数据键限制:$meta_key 会被正则表达式过滤,仅保留字母、数字和下划线字符。
  • 缓存管理:函数执行后会自动清理用户缓存和用户元数据缓存,确保数据一致性。

📄 原文内容

Update metadata of user.

Description

There is no need to serialize values, they will be serialized if it is needed. The metadata key can only be a string with underscores. All else will be removed.

Will remove the metadata, if the meta value is empty.

See also

Parameters

$user_idintrequired
User ID
$meta_keystringrequired
Metadata key.
$meta_valuemixedrequired
Metadata value.

Return

bool True on successful update, false on failure.

Source

function update_usermeta( $user_id, $meta_key, $meta_value ) {
	_deprecated_function( __FUNCTION__, '3.0.0', 'update_user_meta()' );
	global $wpdb;
	if ( !is_numeric( $user_id ) )
		return false;
	$meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);

	/** @todo Might need fix because usermeta data is assumed to be already escaped */
	if ( is_string($meta_value) )
		$meta_value = stripslashes($meta_value);
	$meta_value = maybe_serialize($meta_value);

	if (empty($meta_value)) {
		return delete_usermeta($user_id, $meta_key);
	}

	$cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );

	if ( $cur )
		do_action( 'update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );

	if ( !$cur )
		$wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') );
	elseif ( $cur->meta_value != $meta_value )
		$wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') );
	else
		return false;

	clean_user_cache( $user_id );
	wp_cache_delete( $user_id, 'user_meta' );

	if ( !$cur )
		do_action( 'added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value );
	else
		do_action( 'updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value );

	return true;
}

Changelog

Version Description
3.0.0 Deprecated. Use update_user_meta()
2.0.0 Introduced.