Changer le nom de l'auteur du nom d'utilisateur en surnom

13

Salut à la communauté,
est-il possible de changer le nom d'utilisateur par défaut en pseudo s'il est disponible?

Par défaut, l'URL est quelque chose comme: http: //domain.tld/author/ (admin ),
est-il possible de réécrire et de changer en http: //domain.tld/author/ (pseudo ) donc si un utilisateur change son pseudo à partir de la page de profil, la limace changera-t-elle également au nouveau nom donné par l'utilisateur?

Merci beaucoup!
Philippe

Philippe
la source
Je ne pense pas que vous puissiez le faire de manière réaliste, il n'y a pas de variable de requête qui trouvera des messages basés sur le surnom d'un utilisateur, donc aucune variable appropriée pour mapper le surnom dans une règle de réécriture. Vous devez ajouter votre propre gestion de var de requête pour traiter les requêtes de pseudonymes à côté de tout code de réécriture (c'est possible en théorie, mais je ne pense pas que ce serait élégant en pratique).
t31os

Réponses:

16

Je vois deux façons de résoudre ce problème: changer les données qui forment l'URL de l'auteur ou changer l'URL de l'auteur. Vous devriez probablement également gérer les redirections, de sorte que les anciennes URL vers les archives des utilisateurs continuent de fonctionner lorsqu'un utilisateur change de surnom.

Modification de l'URL de l'auteur

Cette question comporte deux parties: gérer les liens entrants avec le pseudo de l'auteur au lieu du slug de l'auteur et générer des URL de publication de l'auteur avec le pseudo au lieu du slug standard.

La première partie est résolue en se connectant au requestfiltre, en vérifiant s'il s'agit d'une demande d'auteur et en recherchant l'auteur par surnom au lieu de slug. Si nous trouvons un auteur, nous modifions les paramètres de requête pour utiliser l'ID d'auteur.

add_filter( 'request', 'wpse5742_request' );
function wpse5742_request( $query_vars )
{
    if ( array_key_exists( 'author_name', $query_vars ) ) {
        global $wpdb;
        $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
        if ( $author_id ) {
            $query_vars['author'] = $author_id;
            unset( $query_vars['author_name'] );    
        }
    }
    return $query_vars;
}

La deuxième partie se fait en se connectant au author_linkfiltre et en remplaçant la partie auteur standard (indiquée par $author_nicename) par le surnom.

add_filter( 'author_link', 'wpse5742_author_link', 10, 3 );
function wpse5742_author_link( $link, $author_id, $author_nicename )
{
    $author_nickname = get_user_meta( $author_id, 'nickname', true );
    if ( $author_nickname ) {
        $link = str_replace( $author_nicename, $author_nickname, $link );
    }
    return $link;
}

Modification des données qui forment l'URL de l'auteur

Un moyen peut-être plus simple serait de mettre à jour le user_nicenamechamp autrement inutilisé dans la base de données. Je pense qu'il est généré à partir de la connexion utilisateur et n'a jamais changé après cela. Mais je ne suis pas un expert en gestion des utilisateurs, alors utilisez-le à vos risques et périls.

add_action( 'user_profile_update_errors', 'wpse5742_set_user_nicename_to_nickname', 10, 3 );
function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user )
{
    if ( ! empty( $user->nickname ) ) {
        $user->user_nicename = sanitize_title( $user->nickname, $user->display_name );
    }
}
Jan Fabry
la source
Belle solution. Je ne l'ai pas encore vérifié, mais je pense que votre approche est vraiment bonne.
Anh Tran
Qu'en est-il des noms d'auteur en double? Avons-nous besoin de nous en soucier ou WP s'en occupe-t-il?
Drew Baker
Comme l'a dit @DrewBaker, il peut y avoir un problème avec les URL en double si deux profils d'utilisateurs ont des noms similaires. Supposons que si un utilisateur 1 a modifié son nom d'utilisateur en tant que John et qu'il existe un autre utilisateur avec un nom similaire, les deux profils utilisateur ont une URL d'auteur unique comme site.com/author/john. Pouvez-vous me dire s'il existe un correctif à cela?
Netizen
De plus, s'il y a un espace entre le nom, l'URL ne fonctionnera pas. Cela se produit avec les noms d'utilisateur aléatoires créés avec ce code. Lorsque j'ai essayé le code de mon côté, il génère des noms d'utilisateur aléatoires comme Nouvel utilisateur 654937 et l'URL de l'auteur ressemble à site.com/author/Newuser654937/. Cette URL ne fonctionnera pas tant que nous n'aurons pas modifié à nouveau le nom du profil et supprimé les espaces. Y a-t-il Pouvez-vous suggérer une solution avec cela?
Netizen
@IamSJ: Il n'y a pas de prévention automatique contre les noms en double ou les caractères non valides. Vous devrez le fournir vous-même. Probablement le plus simple si vous le faites via la deuxième manière, en changeant le "nom de famille".
Jan Fabry
-3

un moyen simple est le plugin Author Slug

Vous pouvez également utiliser un petit code:

add_action('init', 'set_new_author_base');
function set_new_author_base() {
    global $wp_rewrite;
    $author_slug = 'new_slug';
    $wp_rewrite->author_base = $author_slug;
}
bueltge
la source
3
Ce n'est pas la base d'auteur que l'utilisateur cherche à changer malheureusement.
t31os