我正在构建用户配置文件页面,用户可以在该页面的前端更新他们的配置文件。用户档案扩展了几个自定义字段,如“Twitter”、“Facebook”和“City”。
以下代码成功更新了除dCity
:
$user_fields = array(
\'ID\' => $current_user->ID,
\'nickname\' => esc_attr($_POST[\'nickname\']),
\'first_name\' => esc_attr($_POST[\'first_name\']),
\'last_name\' => esc_attr($_POST[\'last_name\']),
\'display_name\' => esc_attr($_POST[\'display_name\']),
\'user_email\' => esc_attr($_POST[\'email\']),
\'user_url\' => esc_attr($_POST[\'url\']),
\'twitter\' => esc_attr($_POST[\'twitter\']),
\'facebook\' => esc_attr($_POST[\'facebook\']),
\'description\' => esc_attr($_POST[\'description\']),
\'dCity\' => esc_attr($_POST[\'dCity\'])
);
wp_update_user($user_fields) ;
我试着用
update_user_meta
要更新
dCity
它成功了:
$user_fields = array(
\'ID\' => $current_user->ID,
\'nickname\' => esc_attr($_POST[\'nickname\']),
\'first_name\' => esc_attr($_POST[\'first_name\']),
\'last_name\' => esc_attr($_POST[\'last_name\']),
\'display_name\' => esc_attr($_POST[\'display_name\']),
\'user_email\' => esc_attr($_POST[\'email\']),
\'user_url\' => esc_attr($_POST[\'url\']),
\'twitter\' => esc_attr($_POST[\'twitter\']),
\'facebook\' => esc_attr($_POST[\'facebook\']),
\'description\' => esc_attr($_POST[\'description\'])
);
wp_update_user($user_fields);
update_user_meta( $current_user->ID, \'dCity\', $_POST[\'dCity\'] );
所以问题解决了,但我想知道为什么
wp_update_user
不更新所有记录?我做错什么了吗?
提前,谢谢。
最合适的回答,由SO网友:Johannes Pille 整理而成
wp\\u update\\u用户(&U);元数据
wp_update_user
更新用户表中的记录。它并不是要更新usermeta表中的自定义元数据。
因此,您的“问题”实际上是预期的行为。
这个$userdata
参数传递给wp_update_user
可以包含以下字段:
ID、user\\u pass、user\\u login、user\\u nicename、user\\u url、user\\u email、display\\u name、昵称、first\\u name、last\\u name、description、rich\\u editing、user\\u registered、role、show\\u admin\\u bar\\u front
此外,它还接受被识别为“联系人方法”的元数据。它将保存到usermeta表中。
默认情况下,它们是jabber、aimyim。
但是,可以通过\'user_contactmethods\'
滤器至于评论中提出的问题,这可能是推特和;facebook元数据已通过wp_update_user
.
应使用适当的功能保存任何其他元数据。
核心是如何发生的
这只是一个旁白:
wp_update_user
呼叫_get_additional_user_keys
依次调用_wp_get_user_contactmethods
. 生成的元键在wp_update_user
如果存在值,则通过update_user_meta
.
有关参考,请参见Line 1426 and after (as of 3.5.1) of /wp-includes/user.php