Tout savoir sur WordPress
Tutoriel WordPress

Modifier la structure url des profils auteurs en fonction de leur rôle

Ce tutoriel détaille la procédure à suivre pour changer la structure url de la page d’un auteur en fonction de son rôle.

WordPress propose une structure url identique à tous les auteurs de votre site. Chacune des pages de vos auteurs sont accessibles à partir d’une adresse composée comme ceci : mon-site.com/author/pseudo

L’objectif de ce tutoriel est de modifier la base des url (author) par le rôle (traduit en français) de l’auteur pour donner une adresse de ce type : mon-site.com/contributeur/pseudo

Ce tuto est composé en trois parties :

  • modification du préfixe de l’url et création du tag %author_level%
  • récupérer le rôle de l’auteur et le traduire en français
  • modification du préfixe par le rôle de l’auteur

Modification du préfixe de l’url et ajout d’un nouveau tag %author_level%

La première étape consiste à modifier le préfixe author par %author_level% qui sera notre tag de ré-écriture.

Pour rappel, vous pouvez consulter l’astuce qui explique en détails la modification du préfixe : Modifier le préfixe de la page auteur sur WordPress.

add_action( 'init', 'change_author_permalinks' );
function change_author_permalinks() {
    global $wp_rewrite;

    // On définit un nouveau tag pour les rôles des auteurs
    add_rewrite_tag( '%author_level%', '([a-z0-9]+)' );

    // On modifie la structure url de base des pages d'un auteur par notre nouveau tag
    $wp_rewrite->author_base = '%author_level%';

    // On met à jour les règles de ré-écriture
    $wp_rewrite->flush_rules();
}

Si vous regardez l’url du lien pointant vers la page de l’auteur, vous remarquerez une adresse url de ce type : mon-site.com/%author_level%/pseudo .

Bien sûr, pour le moment la page vous ramène vers une erreur 404. Ce qui est tout à fait normal, ne paniquez pas :)

Récupérer le rôle de l’auteur et le traduire en français

La deuxième étape consiste à récupérer le rôle de l’auteur.

Des explications supplémentaires sur la fonction get_the_author_role() sont disponibles sur cet article : Récupérer le rôle de l’auteur d’un article WordPress.

function get_the_author_role( $author_id ) {

    global $wpdb;

    // on récupère le rôle de l'auteur
    $user = get_userdata( $author_id );
    $capabilities = $user->{$wpdb->prefix . 'capabilities'};

    // On fait une instance de la class WP_Roles
    $wp_roles = new WP_Roles();

    // On va faire une boucle sur tous les roles existant
    foreach ( $wp_roles->role_names as $role => $name ) {

    	// On regarde si l'un des roles correspond a celui du membre
    	// Si c'est le cas, on le retourne ^_^
    	if ( array_key_exists( $role, $capabilities ) )
    		return strtolower( sanitize_key( translate_user_role( $name ) ) ); // On traduit le rôle !
	}
}

Modification du préfixe par le rôle de l’auteur

Maintenant que nous avons modifier le préfixe de l’url par le tag %author_level% et que la fonction get_the_author_role() permet de récupérer le rôle de l’auteur, on remplace le tag par le rôle dans l’url.

add_filter( 'author_link', 'new_author_link', 10, 2 );
function new_author_link( $link, $author_id ) {
    
    // On remplace le tag par le rôle du membre !
    $link = str_replace( '%author_level%', get_the_author_role($author_id), $link );
    return $link;

}

Terminé ! Si vous tentez d’accéder à la page profil d’un auteur en cliquant sur son pseudo, vous allez voir que l’adresse url adopte notre nouvelle structure !

Ex : mon-site.com/contributeur/geekpress

Remarque : l’intégralité du code présent dans ce tutoriel se place dans le fichier functions.php présent à la racine de votre thème.

Cet article a été mis à jour il y a 3292 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

13 Commentaires

  1. Bonjour,

    comment modifie-t-on l’url d’un auteur (elle correspond au pseudo) ? Il faut nécessairement recréer un profil avec le bon pseudo et transférer les articles ?

  2. Etant donnée que tu ne peux pas modifier le pseudo d’un membre, tu ne pourra pas modifier la partie “Pseudo” de l’URL d’un membre déjà inscrit.

  3. Le plus simple est donc de créer un nouveau profil et de transférer les articles dessus ? On met une adresse mail temporaire que l’on remplacera après que le transfert ait été effectué et que l’ancien profil ait été supprimé ?

  4. Bonjour,

    Excellent petit code. Je l’ai modifié car je voulais mettre autre chose que le rôle à la place de “author”, suivant l’utilisateur. Pour ceux que ça intéresse, il suffit de zapper l’étape 2 et de remplacer, dans l’étape 3

    $link = str_replace( '%author_level%', get_the_author_role($author_id), $link );
    

    par

    $link = str_replace( '%author_level%', get_the_author_meta('MON_NOUVEAU_CHAMPS', $author_id), $link );
    

    J’ai par contre un seul petit souci : l’url avec “author” est toujours valide. Ne risque-t-on pas du coup un duplicate content ?

    Je me demandais aussi comment remplacer le login par autre chose (comme le surnom).

    Merci pour ce tuto et pour votre aide.

  5. @Floran : il faut faire une redirection 301 de toutes les URLs qui débutent par author/(.*) vers votre préfixe.

    Soit on passe par le plugin Redirection, soit on peut le faire directement avec une RewriteRule dans le fichier .htaccess présent à la racine du site.