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 2310 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.

22ac5db5e3091d25be81a784fd64ada0999999999999999999999999999999