Je construis une page de profil utilisateur où les utilisateurs pourraient mettre à jour leur profil sur le serveur frontal. Le profil de l'utilisateur est étendu avec quelques champs personnalisés, tels que "Twitter", "Facebook" et "Ville".
Le code suivant met correctement à jour tous les détails de l'utilisateur, à l'exception de la 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) ;
J'ai essayé d'utiliser update_user_meta
pour mettre à jour dCity
et cela a fonctionné:
$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'] );
Donc, le problème est résolu, mais je me demande pourquoi wp_update_user
ne met pas à jour tous les enregistrements? Est-ce que je fais quelque chose de mal?
D'avance merci.
wp_update_user
met à jour les enregistrements de la table * _users . Il ne s'agit pas de mettre à jour des métadonnées personnalisées dans la table * _usermeta .
Par conséquent, votre "problème" correspond au comportement attendu.
L'argument $userdata
transmis à wp_update_user
peut contenir les champs suivants:
ID, user_pass, user_login, user_nicename, user_eml, user_email, nom_affichage, surnom, prénom, dernier nom, description, rich_editing, utilisateur_enregistré, rôle, show_admin_bar_front
En outre, il accepte les métadonnées reconnues comme "méthode de contact". Cela économisera dans la table * _usermeta .
Par défaut, ce sont Jabber , objectif & yim .
Ceux-ci peuvent cependant être modifiés/ajoutés à l'aide du filtre 'user_contactmethods'
. Quant à la question soulevée dans les commentaires, il est probable que les métadonnées Twitter et Facebook aient été rendues sauvegardables via wp_update_user
.
Toute métadonnée supplémentaire doit être sauvegardée en tant que telle avec les fonctions appropriées.
Ceci comme un aparté:
wp_update_user
appelle _get_additional_user_keys
qui appelle à son tour _wp_get_user_contactmethods
. Les métakeys résultants sont réitérés dans wp_update_user
et s'il existe une valeur ajoutée à la table * _usermeta via update_user_meta
.
Pour référence, voir Ligne 1426 et après (à partir de 3.5.1) de /wp-includes/user.php