Changer le slug auteur de nom d'utilisateur en pseudo

11

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

Par défaut, l'URL ressemble à quelque chose comme: enlace ),
est-il possible de réécrire et de changer pour enlace ), donc si un utilisateur change de pseudo depuis la page de profil, le slug changera également au nouveau nom donné par l'utilisateur?

merci beaucoup!
Philip

    
posée Philip 21.12.2010 - 21:14

3 réponses

16

Je vois deux façons de résoudre ce problème: modifier les données constituant l'URL de l'auteur ou modifier l'URL de l'auteur. Vous devriez probablement aussi gérer les redirections. Ainsi, les anciennes URL des archives des utilisateurs continuent de fonctionner lorsqu'un utilisateur change de pseudonyme.

Modification de l'URL de l'auteur

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

La première partie est résolue en raccordant le filtre request , en vérifiant s’il s’agit d’une demande d’auteur et en recherchant l’auteur par pseudonyme au lieu de slug. Si nous trouvons un auteur, nous modifions les paramètres de la requête pour utiliser l'identifiant de l'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 est réalisée en s’accrochant au filtre author_link 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 constituant l'URL de l'auteur

Un moyen peut-être plus simple serait de mettre à jour le champ user_nicename non utilisé dans la base de données. Je pense qu'il est généré à partir de la connexion de l'utilisateur et n'a jamais changé par la suite. Mais je ne suis pas un expert en gestion des utilisateurs, 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 );
    }
}
    
réponse donnée Jan Fabry 07.01.2011 - 14:58
1

Utilisez ce plugin: enlace

Bien que cela n’ait pas été testé pour 3.2.1. Je l'utilise sans problème.

Si vous recevez une erreur d’en-tête lors de l’activation du plugin, vous trouverez une solution ici: enlace

    
réponse donnée Dominor Novus 20.11.2011 - 18:07
-3

Le plugin Author Slug est un moyen simple.

Vous pouvez aussi 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;
}
    
réponse donnée bueltge 22.12.2010 - 01:08

Lire d'autres questions sur les étiquettes