Biographie, avatar, préférence de couleur pour l’administration, mot de passe applicatif pour l’API REST : autant d’informations propres à une personne plutôt qu’au site lui-même, réunies sur un seul écran accessible depuis Utilisateurs > Profil ou, pour un administrateur consultant la fiche d’un tiers, via Utilisateurs > Tous les utilisateurs.
Deux hooks selon le regard porté
Le formulaire est extensible par deux actions distinctes : show_user_profile, déclenchée quand l’utilisateur consulte son propre profil, et edit_user_profile, déclenchée quand un tiers consulte celui d’un autre compte. Enregistrer les champs ajoutés nécessite de s’accrocher symétriquement à personal_options_update et edit_user_profile_update, en veillant à vérifier les permissions avant tout enregistrement.
Exemple : ajouter un champ « Téléphone »
<?php
add_action( 'show_user_profile', 'afficher_champ_telephone' );
add_action( 'edit_user_profile', 'afficher_champ_telephone' );
add_action( 'personal_options_update', 'enregistrer_champ_telephone' );
add_action( 'edit_user_profile_update', 'enregistrer_champ_telephone' );
function enregistrer_champ_telephone( $user_id ) {
if ( current_user_can( 'edit_user', $user_id ) && isset( $_POST['telephone'] ) ) {
update_user_meta( $user_id, 'telephone', sanitize_text_field( $_POST['telephone'] ) );
}
}
Pièges fréquents
- L’avatar par défaut affiché sur ce profil provient de Gravatar, un service externe, sauf si une extension de gestion d’avatars locaux a été installée.
- Certains champs, comme le rôle, ne sont modifiables que par un utilisateur disposant de la capacité
edit_users, pas par le titulaire du profil lui-même. - Toujours vérifier
current_user_can( 'edit_user', $user_id )avant d’enregistrer une métadonnée personnalisée, sous peine de laisser n’importe quel utilisateur connecté modifier le profil d’un autre.