Créer une page auteurs sous WordPress


le 31 janvier 2011

WordPress

Créer un blog multi-utilisateur/un webzine sous Wordpress est une bonne idée en soit. Encore faut-il réussir à gérer le projet efficacement. Dans le cas de Mandorine, 26 rédacteurs se sont succédés depuis 2008, certains chroniquent régulièrement pour nous, d’autres nous envoient ponctuellement leurs écrits, et quelques-uns ne font aujourd’hui plus partie de l’équipe. Je souhaitais donc passer par les modèles de page Wordpress pour afficher la présentation de l’équipe. L’avantage de ne pas faire une page statique, c’est de permettre à chaque rédacteur de modifier soi-même son profil, d’ajouter son avatar ou le lien de son site personnel sans avoir à m’envoyer ces informations. On y gagne du temps (surtout moi) et on responsabilise le rédacteur. Je vous propose donc ce tuto : Wordpress créer une page auteurs.

1 – Ajout de champs personnalisés

J’ai ajouté quelques champs personnalisés dans la gestion des profils utilisateurs. Ici, il s’agit de liens vers des profils de réseaux sociaux, mais on peut imaginer d’autres déclinaisons grâce à ce code. Dans le fichier functions.php de votre thème, ajouter le code suivant :

<?php  // Ajout de champs dans la zone de gestion des users
add_action('show_user_profile', 'wpsplash_extraProfileFields');
add_action('edit_user_profile', 'wpsplash_extraProfileFields');
add_action('personal_options_update', 'wpsplash_saveExtraProfileFields');
add_action('edit_user_profile_update', 'wpsplash_saveExtraProfileFields');
function wpsplash_saveExtraProfileFields($userID) {
    if (!current_user_can('edit_user', $userID)) {
        return false;
    }

    update_usermeta($userID, 'twitter', $_POST['twitter']); // Twitter
    update_usermeta($userID, 'facebook', $_POST['facebook']); // Facebook
    update_usermeta($userID, 'linkedin', $_POST['linkedin']); // Linkedin
    update_usermeta($userID, 'flickr', $_POST['flickr']); // Flickr
}
function wpsplash_extraProfileFields($user)
{
?>

<h3>Informations réseaux sociaux</h3>
<table class='form-table'>
<tr>
<th><label for='twitter'>Twitter</label></th>
<td>
<input type='text' name='twitter' id='twitter' value='<?php echo esc_attr(get_the_author_meta('twitter', $user->ID)); ?>' class='regular-text' />
<br />
<span class='description'>Entrez votre pseudo Twitter. http://www.twitter.com/<strong>pseudo</strong></span>
</td>
</tr>

<tr>
<th><label for='facebook'>Facebook</label></th>
<td>
<input type='text' name='facebook' id='facebook' value='<?php echo esc_attr(get_the_author_meta('facebook', $user->ID)); ?>' class='regular-text' />
<br/><span class='description'>Entrez votre pseudo Facebook. http://www.facebook.com/<strong>pseudo</strong></span>
</td>
</tr>

<tr>
<th><label for='linkedin'>LinkedIn</label></th>
<td>
<input type='text' name='linkedin' id='linkedin' value='<?php echo esc_attr(get_the_author_meta('linkedin', $user->ID)); ?>' class='regular-text' />
<br />
<span class='description'>Entrez votre pseudo LinkedIn. http://www.linkedin.com/in/<strong>pseudo</strong></span>
</td>
</tr>

<tr>
<th><label for='flickr'>Flickr</label></th>
<td>
<input type='text' name='flickr' id='flickr' value='<?php echo esc_attr(get_the_author_meta('flickr', $user->ID)); ?>' class='regular-text' />
<br />
<span class='description'>Entrez votre pseudo Flickr. http://www.flickr.com/photos/<strong>pseudo</strong>/</span>
</td>
</tr>
</table>

J’ai donc créé 4 champs supplémentaires, pour 4 sites de réseaux sociaux. Voici ce qui s’affiche dans la zone admin, côté modification de profil d’utilisateur :

2 – Créer un modèle de page

Il vous faut ensuite créer un modèle de page. Ouvrez un éditeur de texte, collez le code qui suit, enregistrez la page sous authors.php puis uploadez le tout sur votre serveur.

<?php
// Template Name: Liste des rédacteurs
 get_header(); ?>

<?php get_footer(); ?>

Il y a plusieurs façons de lister vos auteurs sur une page. vous pouvez utilisez wp_list_authors, mais ce marqueur de modèle est limité car vous ne pouvez pas afficher la présentation de l’auteur, son avatar, ou d’autres informations. La seconde solution consiste à écrire une requête MySql. Je souhaitais pouvoir exclure certains rédacteurs de la liste (le profil d’admin, mais aussi les rédacteurs ponctuels ou ne faisant plus partie de l’équipe) et les trier par ordre alphabétique. Voici ma requête :

<?php
$excluded = "2, 5, 7, 13, 18, 24, 25, 26, 29, 32, 33, 36"; // Pour exclure certains rédacteurs de la liste
$sql = 'SELECT DISTINCT display_name,ID FROM '.$wpdb->users. ' WHERE ID NOT IN ('.$excluded.') ORDER BY display_name';
$authors = $wpdb->get_results($sql);
if($authors):
foreach($authors as $author):
?>

Merci à Guebio pour son aide précieuse sur cette requête.

 
A l’inverse, pour lister uniquement les rédacteurs à inclure sur la page, voici la requête que j’utilise :

<?php
$included = "1,2,3,4"; // Pour inclure les rédacteurs dans la liste
$sql = 'SELECT DISTINCT display_name,ID FROM '.$wpdb->users. ' WHERE ID IN ('.$included.') ORDER BY display_name';
$authors = $wpdb->get_results($sql);
if($authors):
foreach($authors as $author):
?>

 
Ensuite, j’affiche les infos contenues dans le profil de l’utilisateur.

  • D’abord le nom de l’auteur :
 <div class='author'>
<h3><?php echo $author->display_name?></h3>
<?php if(get_the_author_meta('description', $author->ID)): ?>

 

  • Ensuite sa présentation et son avatar :
 <div class='description'>
<p><span><?php echo get_avatar(get_the_author_meta('user_email', $author->ID), 80); ?> </span>
<?php the_author_meta('description', $author->ID); ?></p>
</div>
<?php endif; ?>

J’utilise le plugin User photo pour afficher l’avatar/photo de mes rédacteurs.

  • Puis le dernier article qu’il a publié :
<?php
$recentPost = new WP_Query('author='.$author->ID.'&showposts=1');
while($recentPost->have_posts()): $recentPost->the_post();
?>

<h4>Dernier article : <a href='<?php the_permalink() ?>'><?php the_title(); ?></a></h4>
<?php endwhile; ?>
  • Enfin, les liens vers les réseaux sociaux :
 <ul class='connect'>

<?php if(get_the_author_meta('twitter', $author->ID)): ?>
<li>a href='http://twitter.com/<?php the_author_meta('twitter', $author->ID); ?>' title="Profil Twitter"><img src="http://www.votresite.com/twitter.png" title="Profil Twitter" alt="Profil Twitter" width="25" height="25"/></a></li>
<?php endif; ?>

<?php if(get_the_author_meta('facebook', $author->ID)): ?>
<li>a href='http://www.facebook.com/<?php the_author_meta('facebook', $author->ID); ?>' title="Profil Facebook"><img src="http://www.votresite.com/facebook.png" title="Profil Facebook" alt="Profil Facebook" width="25" height="25"/></a></li>
<?php endif; ?>

<?php if(get_the_author_meta('linkedin', $author->ID)): ?>
<li>a href='http://www.linkedin.com/in/<?php the_author_meta('linkedin', $author->ID); ?>'  title="Profil LinkedIn"><img src="http://www.votresite.com/linkedin.png" title="Profil LinkedIn" alt="Profil LinkedIn" width="25" height="25"/></a></li>
<?php endif; ?>

<?php if(get_the_author_meta('flickr', $author->ID)): ?>
<li>a href='http://www.flickr.com/photos/<?php the_author_meta('flickr', $author->ID); ?>/' title="Profil Flickr"><img src="http://www.votresite.com/flickr2.png" title="Profil Flickr" alt="Profil Flickr" width="25" height="25"/></a></li>
<?php endif; ?>

 

  • Terminez en fermant la boucle :
<?php endif; ?>
<?php endforeach; endif; ?>

3 – Création de la page auteurs

Rendez-vous dans le panneau d’admin de WordPress Menu page Ajouter une page. Créez une page Appliquez le modèle que vous venez de créer Publiez-là.

Vous avez maintenant une page de présentation de vos auteurs personnalisée !

Plus d'astuces pour votre blog WordPress multi-utilisateurs.



35 commentaires

  1. […] solutions pour gérer au mieux une équipe de rédacteurs grandissante. Comme je le précisais dans cet article, 26 rédacteurs se sont succédés depuis 2008, ce qui nécessite une certaine organisation côté […]

  2. Fabien dit :

    Quand je met le code dans function.php , sa me met un message d’erreur

    • Mylène dit :

      Bonjour Fabien,

      Attention à ne pas supprimer ce qui est déjà présent dans le fichier functions.php. Pour plus de sécurité, il vaut mieux coller le code en tout début ou en toute fin de code, entre les balises

  3. Cybercraft dit :

    Bonjour,

    Dans le code à insérer dans functions.php, il manque la fermeture de la fontion => function wpsplash_extraProfileFields($user){

    J’ai ajouter tout à la fin (), C’est pas trés jolie, mais ça fonctionne…

  4. Cybercraft dit :

    Mince, il y a l’interprétation PHP dans le commentaire…

    Il faut fermer à la fin par (Ouverture PHP } fermeture PHP)

  5. kReEsTaL dit :

    Supers astuces ! Hop, j’ajoute ton blog à mon Google Reader.

    Juste une petite remarque : je n’arrive pas à trouver de liens qui permettent de naviguer dans les pages précédentes de ton blog, ni de page « Archives »… C’est embêtant, je n’ai pas envie de regarder toutes les catégories !

    • Mylene dit :

      Cool :)

      Etrange moi j’ai la liste des pages précédentes sur la page d’accueil du blog, en bas ! Mais effectivement je n’avais pas ajouté de liste d’archive, je n’avais pas assez de contenu au départ. Mais je vais l’ajouter :)

  6. Jean-Sylvain dit :

    Bonjour,

    cette fonctionnalité m’intéresse énormément mais j’ai beau respecter le tutorial (merci encore), cela ne fonctionne pas. Est-ce que ce tuto est valable pour WP 3.2.1 svp ?

    PS : Il manque aussi l’emplacement du dossier de destination de « authors.php » mais je pense que c’est à la racine.

    Merci.

    • Mylene dit :

      Bonjour,

      Le authors.php doit être enregistré dans le dossier de votre thème, c’est peut-être pour ça que vous ne parvenez pas à faire fonctionner la page !

  7. zephyr dit :

    ca fonctionne bien. merci pour cette astuce bien cool

  8. Bonjour,

    j’ai pu créer grâce à votre méthode une page auteurs digne de ce nom, merci infiniment pour ce tutoriel.
    http://www.le-gobelin-rose.com/lequipe/

    Je voudrais néanmoins apporter quelques modifications, et si j’arrive à suivre un tutoriel, j’ai bien plus de mal à apporter des modifications.

    Peut-être pourrez-vous m’aider.

    J’ai vu sur la page équipe de Mandorine qu’il est possible de mettre un lien dans les renseignements biographiques. J’ai beau faire, je n’y arrive pas de mon côté, un peu comme si le code n’était pas interprété. Dans la même idée, j’aimerais pouvoir mettre les titres (ce qui est entre crochets) en couleurs, mais là encore, on dirait que le code n’est pas interprété, une idée ?

    La fonction exclude fonctionne plutôt bien, par contre, tous les nouveaux utilisateurs se trouvent pas défaut ajouté à l’équipe, est-ce qu’il y a un moyen de faire en sorte que seuls les personnes taguées comme contributeurs puissent apparaitre dans la liste ? Pour le moment je ne croule pas sous les inscriptions, mais ça pourrait devenir problématique dans l’avenir.

    Merci d’avance de votre aide,

    Le Gobelin Rose

    • Mylene dit :

      Bonsoir, désolée pour le temps de réponse ! Pour les liens, les rédacteurs les entrent en html dans leur présentation.

      Pour mettre en couleur, vous avez deux choix : soit vous créez un champs de texte supplémentaire »titre » (comme pour les champs réseaux sociaux) auquel vous attribuez un style CSS particulier, soit vous entrez un code de type span class= »blue »>Votre titre /a> dans la présentation.

      Concernant le tri des auteurs listés, je me suis posé la question il y a peu mais n’ai pas encore pris le temps de faire des tests. Je suppose qu’il faut trier selon le statut de l’inscrit (contributeur/auteur/éditeur/etc). Si je trouve une solution, je posterai un tuto ici !

  9. Raff dit :

    Bonjour, merci pour ce tuto !

    J’ai cependant une question, d »ou vient le $wpdb , enfin ou le définissez-vous ? parce que, chez moi j’ai une page blanche, vu que je ne connecte pas ma base.

    Merci

    • Mylene dit :

      Bonjour,

      le $wpdb signifie simplement «wordpress database», vous vous en doutez : les infos utilisateurs se trouvent dans la base de donnée, dans la table « users ». Par contre j’ai du mal à comprendre comment vous pouvez utiliser WP sans base de donnée ?

      • Raff dit :

        Non, bien entendu, j’ai une base de données, mais je pensais qu’il fallait la lier à la variable. Je ne comprend donc pas pourquoi ma page est blanche.

        Merci pour la réponse rapide :)

      • Virtuadams dit :

        J’avais aussi une page blanche à cause d’une initialisation de la variable à vide :
        $excluded = «  »;

      • Arthur dit :

        Bonjour,

        J’ai réussi à insérer le code dans fonctions.php
        J’ai fait la modif avec « } ».
        Merci pour toutes ces astuces !

        J’arrive malgré tout à une page blanche et je ne trouve pas $excluded=““, ou comment faire pour remédier au problème.

        Quelqu’un sait comment m’aider, svp ?
        Merci beaucoup.

        Bonne journée
        Arthur

  10. Newsmag dit :

    Actuellement, j’ai encore des soucis pour créer une page auteur spécifique, les donnés ne sont pas bonnes à l’affichage. Mais j’ai surement louper une étape, je vais recommencer

  11. Franck C. dit :

    Bonjour et merci pour le tuto !
    Par contre, sauf erreur de ma part, il manque une balise pour fermer (en tout cas chez moi j’ai dû en rajouter un car ça foutait en l’air la mise en page).

  12. Don dit :

    Bonjour,
    J’ai aussi une page blanche, j’ai pourtant bien enlevé la fonction excluded et la demande « WHERE ID NOT IN » … je ne comprends plus !

    Ca donne ça du coup :

    get_results($sql);
    if($authors):
    foreach($authors as $author):
    ?>

    Quelqu’un peut m’aider ?

  13. Mylene dit :

    Merci pour tous vos commentaires ! Il faudra que je reprenne le code de ce tuto, car j’ai quelque petits soucis d’affichage de balises apparemment :)

    • Don dit :

      ouiii je suis à 2 doigt de la réussite mais avec ce ptit problème la structure de ma page est complètement détruite et impossible de trouver l’erreur dans mon code… :-/

  14. Danna dit :

    Merci beaucoup Mylène, j’utilise ton code depuis plusieurs mois et il m’a bien sauvé la vie en tournant parfaitement sur notre blog multi-auteurs. Les mois ont passés et l’équipe évolue, des gens arrivent, d’autres s’en vont, certains ne sont là que pour un billet… La liste s’allonge et beaucoup n’ont pas leur place, c’est pourquoi je commence à me galérer avec la fonction d’exclusion de certains auteurs. Aurais tu une soluce pour la fonction inverse : lister uniquement les auteurs cités ?

    Merci encore et belle journée à toi !

  15. Yannick dit :

    Bonjour et merci pour votre super tuto ;-)

    J’ai un soucis, dans la page « utilisateurs », j’ai une erreur qui m’empêche de valider la modification du compte de l’auteur :

    Fatal error: Cannot redeclare wpsplash_saveExtraProfileFields() (previously declared in /homez.301/lesaffra/www/wp-content/themes/blacklabel/functions.php:38) in /homez.301/lesaffra/www/wp-content/themes/blacklabel/functions.php on line 81

    Si vous avez le temps et une idée pour m’aider ce serait super sympa !

    Merci et bonne soirée

    Yannick

    • Mylène Boyrie dit :

      Bonjour Yannick,

      Apparemment vous avez modifié le fichier functions.php de votre thème, ce qui déclenche l’erreur. Allez voir la ligne 81, peut-être avez-vous oublié une parenthèse, une accolade, ou quelque chose du même genre…

  16. Bonjour Mylène,
    juste un petit mot pour vous remercier de l’ajout de la fonction qui permet de lister uniquement les auteurs que l’on souhaite voir apparaitre dans la page auteurs.
    J’utilise votre fonction depuis plusieurs mois et c’est pile l’évolution qu’il me fallait !

    Bien amicalement,

    Lidael

  17. Logan dit :

    Bonjour,
    est ce possible d’avoir en menu déroulant la liste des auteurs, choisir un auteur puis en dessous la liste des ses articles encore en menu déroulant, tout ça dans sidebar ?
    Merci

Ajouter un commentaire