Cambia la lumaca dell'autore da Username a Nickname


13

Salve alla community,
è possibile cambiare il nome utente predefinito slug in nickname se è disponibile?

Per impostazione predefinita, l'URL è simile a: http: //domain.tld/author/ (admin ),
è possibile riscrivere e cambiare in http: //domain.tld/author/ (soprannome ), quindi se un utente cambia il suo soprannome dalla pagina del profilo la lumaca cambierà anche con il nuovo nome dato dall'utente?

molte grazie!
Philip


Non credo che tu possa realisticamente farlo, non esiste query_var che troverà post basati sul nickname di un utente, quindi nessuna variabile appropriata su cui mappare il nickname in una regola di riscrittura. Dovresti aggiungere la tua gestione delle query var per gestire le query sui nickname insieme a qualsiasi codice di riscrittura (è possibile in teoria, ma non penso che sarebbe elegante in pratica).
t31os,

Risposte:


16

Vedo due modi per risolvere questo problema: cambiare i dati che formano l'URL dell'autore o cambiare l'URL dell'autore. Probabilmente dovresti gestire anche i reindirizzamenti, quindi i vecchi URL per gli archivi utente continuano a funzionare quando un utente cambia il loro nickname.

Modifica dell'URL dell'autore

Ci sono due parti in questa domanda: gestire i collegamenti in arrivo con il nickname dell'autore invece del lumaca dell'autore e generare gli URL post dell'autore con il nickname invece del lumaca standard.

La prima parte viene risolta agganciandosi al requestfiltro, controllando se si tratta di una richiesta dell'autore e cercando l'autore in base al nickname anziché alla lumaca. Se troviamo un autore, cambiamo i parametri della query per utilizzare l'ID autore.

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 seconda parte viene eseguita agganciando il author_linkfiltro e sostituendo la parte autore standard (indicata da $author_nicename) con il soprannome.

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;
}

Modifica dei dati che formano l'URL dell'autore

Un modo forse più semplice sarebbe quello di aggiornare il user_nicenamecampo altrimenti inutilizzato nel database. Penso che sia generato dal login dell'utente e non sia mai cambiato dopo. Ma non sono un esperto nella gestione degli utenti, quindi utilizzalo a tuo rischio.

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 );
    }
}

Bella soluzione. Non l'ho ancora verificato, ma penso che il tuo approccio sia davvero buono.
Anh Tran,

Che dire dei nomi degli autori duplicati? Dobbiamo preoccuparcene o WP se ne occupa?
Ha disegnato Baker

Come ha detto @DrewBaker, potrebbe esserci un problema con gli URL duplicati se due profili utente hanno nomi simili. Di 'se un utente 1 ha modificato il suo nome utente come John e c'è un altro utente con un nome simile, entrambi i profili utente hanno l'URL del singolo autore come site.com/author/john. Puoi dirmi se c'è una soluzione per questo?
Netizen,

Inoltre, se c'è uno spazio tra il nome, l'URL non funzionerà. Succede con i nomi utente casuali creati con questo codice. Quando ho provato il codice da parte mia, genera nomi utente casuali come Nuovo utente 654937 e l'URL dell'autore sembra site.com/author/Newuser654937/. L'URL non funzionerà fino a quando non modificheremo nuovamente il nome del profilo e rimuovere gli spazi. Puoi suggerire una soluzione con esso?
Netizen,

@IamSJ: non esiste una prevenzione automatica contro nomi duplicati o caratteri non validi. Dovrai fornirlo tu stesso. Probabilmente il più semplice se lo fai tramite il secondo modo, cambiando il "nicename".
Jan Fabry,


-3

un modo semplice è il plugin Autore Slug

Inoltre puoi usare un piccolo codice:

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;
}

3
Purtroppo non è la base di autori che l'utente sta cercando di cambiare.
t31os,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.