[AUTOMATIQUE] Cet article a plus de 5 ans.
Il se peut donc que les informations qu'il fournit ne soient plus totalement exactes.
Article mis à jour le 28/11/2014

Ajouter des informations de contact

WordPress propose par défaut de nombreux champs à remplir dans le profil des utilisateurs.

Le nom, le prénom, le pseudo, une description, un email Yahoo Messenger ou AIM.

En revanche, le CMS ne propose rien sur Facebook, Twitter, et autres réseaux sociaux ! Dommage lorsque l’on veut se tourner vers une communauté de plus en plus connectée.
La solution est assez simple, il suffit de demander à WordPress d’ajouter ces champs.

Pour ce faire, rendez-vous dans votre fichier functions.php de votre thème/child thème.

Maintenant, nous allons ajouter ces lignes de code PHP :

function my_new_contactmethods( $contactmethods ) {
	unset( $contactmethods['yim'] );
	unset( $contactmethods['aim'] );
	unset( $contactmethods['jabber'] );
	$contactmethods['facebook'] = 'Facebook';
	$contactmethods['twitter'] = 'Twitter';
	$contactmethods['gplus'] = 'Google+';
	$contactmethods['linkedin'] = 'LinkedIn';
	$contactmethods['instagram'] = 'Instagram';
	return $contactmethods;
}
add_filter('user_contactmethods','my_new_contactmethods',10,1);

Ici, on supprime yim, aim, jabber et on ajoute les autres. Vous pouvez évidemment choisir d’ajouter/supprimer les lignes selon vos besoins.

Ajouter des informations personalisées

C’est maintenant que les choses se compliquent un petit peu. Nous allons ajouter des champs autre que les champs dits de « contact » que nous venons de voir.

Pour compléter la petite astuce que j’ai publiée sur les Gamercard et Gamertad Xbox Live, je vais prendre comme exemple un champ Gamercard et Gamertag. Nous allons également ajouter un champ « Localisation ».

Le fonctionnement est le suivant : Nous allons ajouter du code à notre fichier fonctions.php pour demander à wordpress de créer de nouvelles variables. Ici, $gamercard, $gamertag et $location. Ce code fonctionne parfaitement, c’est un copier/coller de celui que j’utilise sur un de mes sites.
Voici les fonctions à insérer :

<?php

function extra_user_profile_fields( $user ) { ?>

	<h3>Titre du bloc d'information</h3>
	<table class="form-table">
		<tbody>
			<tr>
				<th>Location</th>
				<td><input class="regular-text" id="location" type="text" name="location" value="<?php echo esc_attr( get_the_author_meta( 'location', $user->ID ) ); ?>" /></td>
			</tr>
			<tr>
				<th>Gamertag</th>
				<td><input class="regular-text" id="gamertag" type="text" name="gamertag" value="<?php echo esc_attr( get_the_author_meta( 'gamertag', $user->ID ) ); ?>" /></td>
			</tr>
			<tr>
				<th>Gamercard</th>
				<td><input class="regular-text" id="gamercard" type="text" name="gamercard" value="<?php echo esc_attr( get_the_author_meta( 'gamercard', $user->ID ) ); ?>" /></td>
			</tr>
		</tbody>
	</table>
	
<?php }
add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );


function save_extra_user_profile_fields( $user_id ) {

	if ( !current_user_can( 'edit_user', $user_id ) ) { 
		return false; 
	}
	update_user_meta( $user_id, 'location', $_POST['location'] );
	update_user_meta( $user_id, 'gamertag', $_POST['gamertag'] );
	update_user_meta( $user_id, 'gamercard', $_POST['gamercard'] );
	
}
add_action( 'personal_options_update', 'save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' );

 ?>

Voilà c’est fait, nos champs existent. Vous pouvez les remplir en vous rendant dans votre profil utilisateur. En revanche, ils ne servent pas encore à grand-chose car il reste stocké dans le profil et visible seulement par les administrateurs dans les profils de chaque utilisateur.

L’affichage des informations

Ces informations d’utilisateur sont stockés dans les meta user.

C’est donc avec l’id d’un utilisateur que nous allons pouvoir afficher toutes les informations que nous venons d’ajouter !

Dans le tutoriel suivant je vous expliquerai comment afficher ces informations sur vos pages d’auteurs.

Voir le tutoriel sur l’affichage des informations du profil utilisateur

Article rédigé parBrice CAPOBIANCO

Autodidacte passionné par WordPress. J'aime apprendre et créer pour ensuite partager !

Coorganisateur des Meetups WordPress Rennes et fondateur de bweb.
Partager cet article

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Afficher les 21 commentaires

21 commentaires

  1. Bonjour Alain,
    Désolé mais je ne parviens pas à lire vos différents bouts de code.
    Vu l’ampleur de la question, je vous invite plutôt à vous diriger vers un forum dédié (wpfr.net/support/) car je ne suis pas sûr de pouvoir aider ici.
    Par ailleurs, cet article est un peu (beaucoup) daté et je ne suis pas convaincu non plus que ce qui est figure soit tjs juste.
    Bonne continuation 🙂

  2. Bonjour,

    Vraiment merci de vos extraits de code car ceux-ci m’ont aidé à faire ce que je voulais… du moins, jusqu’à ce que je décide de compliquer un peu la chose !!!

    Tout d’abord, voici le détail de ce qui fonctionne :

    Depuis une page du site, je permet à des utilisateurs de répondre ou non à une ou plusieurs questions.
    Pour les questions à laquelle ils répondent, les questions et le titre des questions apparaissent sur leur page auteur.
    Si ils ne répondent pas, rien n’apparaît.
    Parallèlement, des champs avec label correspondant à chacune des questions posées sont ajoutés dans le back end du profil utilisateur.
    En cas de nécessité, l’administrateur peut alors modifier le contenu de ces champs. En ce cas, ce contenu est à la fois reporté sur la page qu’utilise l’utilisateur pour modifier son profil et sur sa page auteur.

    Jusqu’à présent, le titre des questions auxquelles devaient répondre les utilisateurs étaient fixes (titre b1). Cela fonctionnait très bien et ci-dessous un extrait du code qui est dans le fichier function.php de mon thème enfant.

    Entre la balise Le titre de la question posée
    Entre la balise La réponse à la question posée

    ID )
    ); ?>

    Ensuite, j’ai voulu compliquer un peu la chose dans le sens où je souhaitais que les utilisateurs posent eux même la question à laquelle il devaient répondre. C’est l’extrait de code ci-dessous et celui-ci fonctionne également.

    Entre la balise Le titre de la question qu’il se pose
    Entre la balise La réponse à cette question

    ID ) ); ?>

    ID )
    ); ?>

    Pour aller plus loin, je souhaite maintenant conjuguer les deux possibilités ci-dessus. Celles de laisser le choix à l’utilisateur de répondre à une question pré-inscrite (titre b3) ou de se poser lui même une question (titre3).

    Si il se pose une question, titre3 n’est pas NULL et c’est le titre de cette question qui apparaît tant sur la page author que dans le back-end de son profil utilisateur.

    Si il ne se pose pas de question, titre3 devient NULL et c’est donc le titre de la question prédéfinie (titre b3) qui apparaît.

    Mais voilà, c’est là que je rencontre un problème !!! Ces conditions « If et Else » fonctionne très bien pour ce qui est du report des informations (titre utilisé + réponse question) vers la page author mais ne fonctionne pas du tout pour le report du titre utilisé dans le back-end du profil utilisateur.

    Ci-dessous, l’extrait de code du fichier function.php qui ne fonctionne pas. J’ai essayé de tourner ces conditions dans tous les sens, mais je n’y arrive pas… auriez-vous une idée ou une piste vers laquelle m’orienter.

    ID ) ); }
    else {
    echo _e( ‘titre b3’, ‘autoportrait’ ); }
    ?>

    ID )
    ); ?>

    Merci beaucoup et désolé d’être aussi long !!!

  3. Bonjour et merci pour ce tuto clair et efficace.
    Première question le contenu du fichier functions peut-il être copier dans celui d’un module custom?
    Deuxièmement, j’aurai besoin d’avoir un champ d’upload d’image, comment dois-je faire ?
    Merci

  4. Ce code est parfait. De longues heures de recherche ont été économisées grâce à vous. Merci.
    Pensez à rajouter des au sein des pour rester dans la logique des templates admin WP (juste pour le fun).

  5. $contactmethods[‘facebook’] = ‘Facebook’;
    Avec ce code, est ce que c’est possible de personnalisé le input?
    Où on doit faire comme l’autre méthode.
    Cordialement Nicolas.

    • Bonjour,
      Je ne suis pas sûr de comprendre ce que tu veux personnaliser. Si tu veux quelque chose de purement custom, je te conseils de créer un champ « classique » en utilisant en effet la seconde méthode.
      Bonne journée.

    • Bonjour,
      A priori tout est toujours fonctionnel, certains champs relatifs aux « contact methods » on peut-être changé par défaut.
      Niveau sécurité, il n’y a pas de raison qu’il y est des problèmes car ce sont les hooks et fonctions WordPress qui se chargent des différents contrôles et nettoyages avant enregistrement en base.
      Je te conseils donc d’essayer et revenir laisser un petit commentaire en cas de problème 😉

  6. hello, merci pour ce code mais comment faire pour avoir un champs en plus qui ne soit que modifiable que par l’administrateur.
    Un système de point que seulement l’admin puisse modifier, merci

    • Salut Darknote, il faut regarder du côté des « user meta » dans ton cas, ce plugin semble pouvoir l’affaire wordpress.org/plugi…user-meta/
      Je ne le connais pas du tout, mais sur la papier il a l’air de contenir les fonctionnalités nécessaire pour répondre à tes besions.

  7. Est-il possible d’ajouter une balise Select avec plusieurs « option » dans le profil utilisateur ?

    Si oui comment ? je n’arrive pas a récuperer la valeur avec :
    ID)) ?>

    Merci