web-dev-qa-db-fra.com

wp_update_user ne met pas à jour et update_user_meta ne

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.

4
Tomas

wp_update_user & metadata

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.

Comment ça se passe dans le noyau?

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

8
Johannes Pille